【问题标题】:Pointer variable of a linked list: difference between the variable, reference to the variable, and pointer to the variable [closed]链表的指针变量:变量、变量引用和变量指针之间的区别[关闭]
【发布时间】:2016-05-03 00:20:54
【问题描述】:

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

谢谢。

【问题讨论】:

  • However, when I get different values when outputting the two. 当然你得到不同的值。 list 是列表的地址,&list指向列表的指针的地址
  • BTW 用于打印指针值,您应该使用 %p 而不是 %d
  • 我有一个问题......没有人必须抨击它。那么如果我还在学习呢,我​​认为开发者社区的思想更加开放。
  • 令人惊讶的是,苹果与香蕉的特性不同。而main 的签名有误。

标签: c pointers linked-list


【解决方案1】:

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

& 运算符可以应用于对象,以便在 C 和 C++ 中检索它们在内存中的地址,从而产生一个指针。跟参考没有关系。即使在 C++ 中。

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

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

不过,这在 C 中是不可能的。


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

【讨论】:

    【解决方案2】:

    您好,如上所述,&list 表示引用类型,但根据我的不同,&list 是您的引用类型,即值存储在堆中,对值的引用存储在堆栈中,而只需键入list 就像声明一个值类型来存储一个值,它也可以是泛型的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多