C 链表的指针变量:变量、变量引用和变量指针之间的差异

C 链表的指针变量:变量、变量引用和变量指针之间的差异,c,pointers,linked-list,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",

在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和list有什么区别呢?我知道and&是对变量的引用,不带*的变量名是第一个条目的地址。但是,当我在输出这两个值时得到不同的值时

谢谢

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

可以将操作符应用到对象中,以便在内存中检索它们的地址,在C和C++中产生指针。这与推荐信无关。即使在C++中,

在C++中,可以使用符号和字符来定义引用:

不过,这在C语言中是不可能的


顺便说一句,printf使用特定类型的特定格式说明符。%d代表整数。对于像&i这样的指针,使用%p。错误使用错误的格式说明符是未定义的行为。

您好,如上所述,&list表示引用类型,但根据我的理解,不同之处在于,&list是您的引用类型,即值存储在堆中,对值的引用存储在堆栈中,而简单地键入list就像声明值类型来存储一个值,也可以使其成为通用值。

但是,当我在输出这两个值时得到不同的值时。当然你会得到不同的值。list是列表的地址,&list是指向list的指针的地址。顺便说一句,要打印指针值,您应该使用%p而不是%d。我有一个问题……没人会反对它。所以,如果我还在学习,我认为开发者社区的思想更开放一点。令人惊讶的是,苹果和香蕉有着不同的特性。main的签名有误。
int i;
int& b = i;    // reference referencing i