函数参数中的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 中 typedefstruct,因此您不必每次都编写它。

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/unions。例如,如果将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关键字,有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中的高斯函数有啥区别吗?

Excel excel函数参数中的range和reference有啥区别

Excel excel函数参数中的range和reference有啥区别

重载和重写有啥区别

sql语言中的concat函数和nvl函数二者有啥区别?

python函数中的位置参数默认参数关键字参数可变参数区别