c - 链表的指针变量 : difference between the variable, 对该变量的引用,以及指向该变量的指针

标签 c pointers linked-list

在 C 中,我正在玩弄一个链接列表,看看有什么 printf当传递不同版本的变量名称时将显示。

typedef struct node{
    int node_value
    struct node *next;
} list_node;

int main(){
list_node *list;    

list = getnode();
printf("address of *list %d\n", &list);
printf("list->next of *list %d\n", list);
printf("list->next of *list %d\n", list->next);
printf("double pointer **list %d\n", *list);

return 0;
}

*list将打印node_value

但是 &list and list 之间有什么区别? ?我知道&是对变量的引用,而没有*的变量名是第一个条目的地址。但是,当我输出两者时得到不同的值时。

谢谢。

最佳答案

不!你说的是 C 和 C++ 的一些混淆。这是C代码。 C 没有引用。

在 C 和 C++ 中,& 运算符可应用于对象,以便检索其在内存中的地址,从而生成指针。和引用没有任何关系。即使在 C++ 中也是如此。

在 C++ 中,您可以使用与符号 (&) 来定义引用:

int i;
int& b = i;    // reference referencing i

但这在 C 语言中是不可能的。

<小时/>

顺便说一句,printf 对特定类型使用特定的格式说明符。 %d 代表 int。对于指针(如 &i),请使用 %p。错误使用错误的格式说明符是未定义的行为。

关于c - 链表的指针变量 : difference between the variable, 对该变量的引用,以及指向该变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35013813/

相关文章:

c - C 中的指针和 typedef

c - 编写链表函数

c - Sqlite:为查询结果创建新表并保留原始模式

c代码莫名其妙地跳行

c - linux/初始化.h : No such file or directory

c++ - 是否有任何方法可以将具有 O(n) 复杂度的矩阵相乘?

C# 对象有效

c++ - 关于从结构指针读取的代码的简单代码

c - 打印双向链表时发生访问冲突

java - 使用递归将数组转换为自定义 LinkedList 类