Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数调用中,结构节点*和节点*之间有什么区别?_C++_Struct_Scope_Declaration - Fatal编程技术网

C++ 在函数调用中,结构节点*和节点*之间有什么区别?

C++ 在函数调用中,结构节点*和节点*之间有什么区别?,c++,struct,scope,declaration,C++,Struct,Scope,Declaration,传递给函数1和函数2的内容有什么区别 struct Node { int data; struct Node *next; }; void function1(struct Node *start) { // ... } void function2(Node *start) { // ... } 除了作为一种潜在的前瞻性声明(在您的案例中,这是一个没有实际意义的点)存在之外,根本没有区别。在函数参数列表中使用struct节点*,是对C语言的要求的尊重 你不

传递给函数1和函数2的内容有什么区别

struct Node
{
    int data;
    struct Node *next;
};

void function1(struct Node *start)
{
    // ...
}

void function2(Node *start)
{
    // ...
}

除了作为一种潜在的前瞻性声明(在您的案例中,这是一个没有实际意义的点)存在之外,根本没有区别。在函数参数列表中使用
struct节点*
,是对C语言的要求的尊重

<>你不需要在C++中这样做,因为它有一种不同的方式来将它的命名空间组织到C.<
有关构造的更正式的解释,请参见

本质上的区别在于,在函数声明/定义点之前没有声明类型时会发生什么

只要
function1
不尝试访问对象的任何成员,就不需要存在类型定义或声明。它的作用是将
struct Node
声明引入封闭范围


function2
确实需要它(或存在的某个地方的转发声明),不管它对对象做了什么。它不会隐式地引入类类型。

在以下代码段中可以看出差异

第一个是

void function1( struct Node *start );

struct Node
{
    int data;
    struct Node *next;
};
第二个是

void function2( Node *start );

struct Node
{
    int data;
    struct Node *next;
};
第一个代码段格式良好。在函数的参数声明中,使用了详细的类型说明符,该说明符引入了类型
struct节点
。在函数声明之后,可以进一步定义结构本身

对于第二个代码段,编译器将发出错误,因为未定义名称
节点

也可以通过变量声明隐藏结构的名称。在这种情况下,还必须使用结构的详细名称

比如说

struct Node
{
    int data;
    struct Node *next;
};

int Node;

void function1( struct Node *start );

从C++标准(3.4.4详细说明类型说明符)

2如果详细说明的类型说明符没有嵌套的名称说明符,以及 除非详细的类型说明符出现在带有 以下表格:

根据3.4.1查找标识符,但忽略任何 已声明的非类型名称…如果详细说明的类型说明符为 由类键引入,此查找未找到以前的 声明的类型名称,或者如果详细的类型说明符出现在 声明及表格:

详细的类型说明符是介绍 类名如3.3.2所述


没有一个你从C++学习什么来源?如果名为
Node
的对象在作用域中,第一个将起作用,第二个将不会编译。如果尚未声明,第一个也将在外部范围中声明
struct Node
。@melpomene存在差异,这称为“struct Node”,是一个C-ism。在C++中,“Stutt”是不需要的。@昆廷点,但是在提供的代码<代码>中定义了Stutt节点,并且没有其他对象。如果名为
Node
的对象在作用域中,第一个将起作用,第二个将不会编译。如果尚未声明,第一个语法还将在外部作用域中声明
struct Node
。这是错误的,第二个语法对于不完整的类型来说已经足够好了(否则我们会到处看到
struct Foo
。@Quentin这并不是真的错误。如果不声明
节点
函数1
起作用,
函数2
不起作用。您正在考虑一个
struct节点
类型定义结构节点这在问题中不存在。@Quentin-@Quentin-(通过导线发送不可见的可能能量)。希望这一天剩下的时间对你更好:)@Quentin记住,不管你今天过得多么糟糕,总有人不得不将Microsoft Edge移植到Android上。
class-key attribute-specifier-seqopt identifier ;
class-key attribute-specifier-seqopt identifier ;