两者之间有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
。和
name *next=NULL;`
(在数据结构之后定义,当链表仍然为空时)?
"这有什么区别..."
没有。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
。
另一个重要的区别。
请考虑以下代码片段
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
隐藏外部代码块中的结构声明。