我正在尝试学习C中的指针,并且不明白为什么将unary *运算符附加到以下代码片段中“node”一词的末尾:
struct node* CopyList(struct node* head) {
/* code here */
}
根据我对指针的理解,可以使用类似
的语句创建指针int *pointerName;
并使用类似
的语句为其指定“指针”pointerName = malloc(sizeof(int));
然后使用类似
的语句取消引用指针*pointerName = 4;
将整数值4存储在4个字节的内存(指针位置)中,该指针由pointerName指针“指向”。
有了这样的说法,当*被附加到一个单词的结尾时,它是什么意思,就像它一样
struct node*
???
提前致谢!
答案 0 :(得分:3)
*
的位置忽略基类型和变量名之间的空格。那就是:
int* foo; // foo is pointer-to-int
int *bar; // bar is also pointer-to-int
在这两种情况下,变量的类型是“指向int的指针”; “pointer-to-int”是一种有效的类型。
有了这些信息,您可以看到struct node*
是类型,该类型是“指向节点结构的指针”。最后,因此,整行
struct node* CopyList(struct node* head)
表示“CopyList
是指针指向struct node
(称为head
)并返回指针 - struct node
”
答案 1 :(得分:1)
struct node* CopyList
为了更好地理解你应该从右到左阅读它。其中说CopyList
是一个返回节点指针的函数。
答案 2 :(得分:1)
int *pointerName;
与int * pointerName;
或int* pointerName;
相同。在所有这些情况下,数据类型为int*
。因此struct node*
只是指向struct node
的指针。
答案 3 :(得分:1)
您可以在类型或函数名称/变量名称中使用'*'。
但建议在声明时使用返回类型方法,如下所示
struct node* CopyList(struct node* head) {
/* code here */
}
当声明类型的指针时使用带有变量名的*。 如下所示,
int *ptr;
以这种方式声明可以提高可读性。
例如,考虑这种情况,
int* a,b,c;
上面的语句看起来像是声明了基类型整数的三个指针变量,实际上我们知道它等于
int *a;
int b,c;
将*运算符保持在数据类型附近会导致混淆,所以遵循另一种方式会增加可读性,但是以任何一种方式使用*都没有错。
答案 4 :(得分:0)
node*
表示以下函数/变量/结构具有类型'指向类型节点的指针'。