-1

我正在尝试了解 C 中的指针,但不明白为什么在以下代码片段中将一元 * 运算符附加到单词“node”的末尾:

struct node* CopyList(struct node* head) {
    /* code here */
}

根据我对指针的理解,可以使用如下语句创建指针

int *pointerName;

并使用类似的语句为其分配一个“指针”

pointerName = malloc(sizeof(int));

然后使用如下语句取消引用指针

*pointerName = 4;

它将整数值 4 存储在由 pointerName 指针“指向”的 4 字节内存(指针位置)中。

话虽如此,当*被附加到单词的末尾时,它是什么意思,就像它一样

struct node*

???

提前致谢!

http://cslibrary.stanford.edu/103/

4

5 回答 5

3

的位置*忽略了基本类型和变量名之间的空格。那是:

int* foo; // foo is pointer-to-int
int *bar; // bar is also pointer-to-int

在这两种情况下,变量的类型都是“pointer-to-int”;“pointer-to-int”是一个有效的类型。

有了这些信息,您可以看到这struct node*是一个类型,该类型是“指向节点结构的指针”。最后,因此,整行

struct node* CopyList(struct node* head)

意思是“CopyList是一个函数,它接受一个指向- struct node(被调用head)并返回一个指向-的指针struct node

于 2013-07-17T11:25:07.190 回答
1

您可以将“*”与类型或函数名称/变量名称一起使用。
但建议在声明方法时使用返回类型,如下所示

    struct node* CopyList(struct node* head) {
     /* code here */
    }

当声明一个类型的指针时,使用 * 和变量名。如下图所示,

    int *ptr;

以这种方式声明会增加可读性。

例如考虑这种情况,

    int* a,b,c;

上面的语句看起来像是声明了三个基类型整数的指针变量,实际上我们知道它等于

    int *a;
    int b,c;

将 * 运算符保持在数据类型附近会导致这里的混乱,因此遵循另一种方式会增加可读性,但无论哪种方式使用 * 都没有错。

于 2013-07-17T12:07:01.820 回答
1

struct node* CopyList

为了更好地理解,您应该从右到左阅读它。这说CopyList的是一个返回指向节点的指针的函数。

于 2013-07-17T11:23:24.230 回答
1

int *pointerName;int * pointerName;与或相同int* pointerName;。数据类型适用int*于所有这些情况。所以struct node*只是一个指向struct node.

于 2013-07-17T11:24:15.777 回答
0

node*表示以下函数/变量/结构具有类型“指向类型节点的指针”。

于 2013-07-17T11:24:57.517 回答