有和没有结构的指针声明?
Pointer declaration with and without struct?
有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
...和
name *next=NULL;`
(定义在数据结构之后,链表还是空的时候)
?
"What's the difference between ..."
有none。 struct
或 class
关键字在指针声明中是可选的。
首先是结构
中名称为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
将结构声明隐藏在外部代码块中。
有什么区别:
struct name{
int example;
name *next;
};
struct name *next= NULL;
...和
name *next=NULL;`
(定义在数据结构之后,链表还是空的时候) ?
"What's the difference between ..."
有none。 struct
或 class
关键字在指针声明中是可选的。
首先是结构
中名称为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
将结构声明隐藏在外部代码块中。