作为C++的初学者,我正在学习链表和其他数据结构.在线查看了一些实现后,我发现了这两种定义struct的方法.两者有什么区别.在一个中,我们在下一个指针之前添加"struct",而在一个中我们不添加.
方式1:
struct node
{
int data;
node *next;
};
Run Code Online (Sandbox Code Playgroud)
方式2:
struct node
{
int data;
struct node *next;
};
Run Code Online (Sandbox Code Playgroud)
struct node *next;
Run Code Online (Sandbox Code Playgroud)
仅在C代码中是必需的.在C中,做:
node *next;
Run Code Online (Sandbox Code Playgroud)
不被允许.但是,在C++中,您可以使用这两种方法.在这种情况下,它们之间没有区别.
只有struct在存在某种歧义或struct尚未定义的情况下,您才需要在C++中使用关键字进行声明.(对于第一那份一个实例stat函数,这是一个功能和一个struct上POSIX系统).
两者有什么区别.
不同之处在于后者(称为详细类型说明符)声明它node是一个结构.
在这种情况下,声明它node是一个结构是多余的,因为它已经被声明:
struct node
^^^^^^^^^^^ <-- node is a struct
{
int data;
node *next;
};
Run Code Online (Sandbox Code Playgroud)
一个存在差异的案例:
struct a {
//b* pointer; // oops, we don't know what b is
struct b* pointer; // OK, b is a struct
};
struct b{};
Run Code Online (Sandbox Code Playgroud)
通常†并非绝对必须使用精心设计的类型说明符,因为可以使用单独的声明:
struct b;
struct a {
b* pointer;
};
struct b{};
Run Code Online (Sandbox Code Playgroud)
他们之间的选择是个人偏好.
†我说通常是因为有时你需要它来消除类型中同名变量的歧义:
int foo;
struct foo{};
int main()
{
foo = 10; // refers to int
struct foo instance; // refers to the struct
}
Run Code Online (Sandbox Code Playgroud)
对于多个事物使用相同的名称通常是一个糟糕的设计,所以这不是很典型.
最后,有时需要编写可以包含在C和C++中的头文件.此标头必须使用两种语言的公共子集.
在C中,node不是类型名称,而是结构的标记.在C中有必要使用struct关键字引用struct标记.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |