This question already has answers here:
Why does C need “struct” keyword and not C++?
(6个答案)
5年前关闭。
之间有什么区别:
...和
(在链表仍然为空时在数据结构之后定义)
?
和在结构后声明的具有相同名称的变量,例如
是两个不同的实体。
最后的声明不会将结构任何对象的数据成员初始化为NULL。它声明一个指向结构类型的对象的指针。
现在介绍两个声明之间的区别
和
在第一个中,使用了所谓的详细类型名称
这里的枚举器
然后编译器将发出错误。
但是,如果您将使用详细的名称
然后代码成功编译,因为编译器现在知道此声明中的
另一个重要的区别。
考虑以下代码片段
在此程序中,内部代码块中的声明声明了在外部代码块中声明的结构类型的指针。
现在重写程序
在这种情况下,内部代码块中的声明引入了新类型
(6个答案)
5年前关闭。
之间有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
...和
name *next=NULL;`
(在链表仍然为空时在数据结构之后定义)
?
最佳答案
首先,结构中名称为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
在外部代码块中隐藏结构声明。关于c++ - 有和没有结构的指针声明? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30816667/