【发布时间】:2018-08-27 08:19:15
【问题描述】:
我有一个结构定义为:
typedef struct{
int pages;
}book;
我先声明一个实例:
book *b=malloc(sizeof(book));
b->pages=35;
然后我将另一本书的指针声明为:
book *a;
a=&b;
调试后我发现结构a 中的成员与b 不一样?我在a 中得到pages 的错误值。
a不应该指向b的内存吗?如何正确取消引用a?对不起,如果我没有正确理解指针的概念。
【问题讨论】:
-
&b的类型是什么?您是否使用-Wall -Wextra -pedantic编译并获得了无警告构建? -
a类型为pointer to book。&b类型为pointer to pointer to book。你可能打算在这里做a = b。 -
a=&b;不是有效的 C 代码并且不会编译,所以这就是原因。 -
@user3597222:指针变量不包含结构数据;它仅包含对数据所在位置的“参考”。
malloc(sizeof (book))为结构数据分配内存,并返回指向它的指针(“引用”)。您可以将该值分配给任意数量的指针,它们都将平等地引用相同的书籍数据。->运算符告诉编译器左侧是指向结构的指针,右侧命名表达式应计算为的成员。与.相比,左侧指的是结构,而不是指向结构的指针。
标签: c pointers reference structure