函数参数中的struct关键字,有啥区别?
Posted
技术标签:
【中文标题】函数参数中的struct关键字,有啥区别?【英文标题】:Struct keyword in function parameters, what is the difference?函数参数中的struct关键字,有什么区别? 【发布时间】:2015-07-01 08:38:10 【问题描述】:我想知道,有什么区别:
struct Node
int data;
Node *next;
;
和
struct Node
int data;
struct Node *next;
;
为什么我们在第二个例子中需要struct
关键字?
还有,和有什么区别
void Foo(Node* head)
Node* cur = head;
//....
和
void Foo(struct Node* head)
struct Node* cur = head;
//....
【问题讨论】:
这应该回答你的问题:***.com/questions/8422775/… C 或 C++?答案因语言而异。 昆汀说了什么。删除 C++ 或 C 标记。 【参考方案1】:只有包含struct
的声明在C中有效。在C++中没有区别。
但是,您可以在 C 中 typedef
和 struct
,因此您不必每次都编写它。
typedef struct Node
int data;
struct Node *next; // we have not finished the typedef yet
SNode;
SNode* cur = head; // OK to refer the typedef here
为了兼容性,此语法在 C++ 中也有效。
【讨论】:
“在 C++ 中没有区别。” - 这并不完全正确......struct Node* next;
仅搜索 struct
/class
/@ 987654328@ 使用该名称并愉快地忽略具有相同标识符的非struct
/class
/union
s。例如,如果将int Node;
数据成员添加到struct Node;
,它不会与struct Node* next;
冲突,但会与Node* next;
冲突。不过,没有人会依赖这种区别——这会导致代码无法维护。【参考方案2】:
结构节点是我们创建的一种新的用户定义数据类型。与类不同,使用结构的新数据类型是 "struct strct_name" ,即;你需要 struct_name 前面的关键字 struct。 对于类,您不需要在新数据类型名称前使用关键字。 例如;
class abc
abc *next;
;
当你声明变量时
abc x;
而不是结构
abc x;
在结构的情况下。 也明白了,由语句
struct node * next;
我们正在尝试创建一个指向“strcut node”类型变量的指针,在这种情况下称为自引用指针,因为它指向父结构。
【讨论】:
以上是关于函数参数中的struct关键字,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Excel excel函数参数中的range和reference有啥区别