【发布时间】:2015-06-13 08:30:06
【问题描述】:
两者有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
...和
name *next=NULL;`
(定义在数据结构之后,当链表还是空的时候) ?
【问题讨论】:
标签: c++ struct linked-list
两者有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
...和
name *next=NULL;`
(定义在数据结构之后,当链表还是空的时候) ?
【问题讨论】:
标签: c++ struct linked-list
“和...有什么区别”
没有。 struct 或 class 关键字在指针声明中是可选的。
【讨论】:
首先是结构中名称为next的数据成员
struct name
{
int example;
name *next;
};
和结构后声明的同名变量如示例
struct name *next = NULL;
是两个不同的实体。
最后一个声明没有将结构的任何对象的数据成员初始化为 NULL。它声明了一个指向结构类型对象的指针。
现在说说这两个声明的区别
struct name *next = NULL;
和
name *next = NULL;
在第一个中使用了所谓的详细类型名称struct name。与第二个声明相比,它的优点是任何对象、枚举数或同名name 声明的函数都隐藏了结构的声明。例如
struct name
{
int example;
name *next;
};
enum { name, noname };
这里的枚举器name隐藏了数据类型struct name,如果你写了例子
name *next = NULL;
那么编译器会报错。
但如果你会使用详细的名称
struct name *next = NULL;
然后代码编译成功,因为编译器现在知道此声明中的name 是struct name。
另一个重要的区别。
考虑下面的代码sn-p
int main()
{
struct name
{
int example;
name *next;
};
{
name *next = NULL;
}
}
在这个程序中,内部代码块中的声明声明了外部代码块中声明的结构类型的指针。
现在重写程序
int main()
{
struct name
{
int example;
name *next;
};
{
struct name *next = NULL;
}
}
在这种情况下,内部代码块中的声明引入了一个新类型
struct name 将结构声明隐藏在外部代码块中。
【讨论】: