在C中使用指针时放置一元运算符

时间:2013-07-17 11:20:14

标签: c pointers

我正在尝试学习C中的指针,并且不明白为什么将unary *运算符附加到以下代码片段中“node”一词的末尾:

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

根据我对指针的理解,可以使用类似

的语句创建指针
int *pointerName;

并使用类似

的语句为其指定“指针”
pointerName = malloc(sizeof(int));

然后使用类似

的语句取消引用指针
*pointerName = 4;

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

有了这样的说法,当*被附加到一个单词的结尾时,它是什么意思,就像它一样

struct node*

???

提前致谢!

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

5 个答案:

答案 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*表示以下函数/变量/结构具有类型'指向类型节点的指针'。