【发布时间】:2009-11-06 14:42:42
【问题描述】:
我正在编译这段代码,但出现编译错误,提示“取消引用指向不完整类型的指针”。 我得到了最后一个打印语句的错误,在此之前我尝试指向 (*temp)。 num到b的地址
void main()
{
struct {
int xx;
char *y;
int * num;
struct x *next;
}x;
struct x* temp;
int b = 10;
temp = ((struct x *)malloc(sizeof(x)));
(*temp).num = &b;
x.next = temp ;
printf(" %d\n",temp->num, x.next->num);
}
【问题讨论】:
-
main()返回一个整数。要使您的程序更便携,请使用int main(void) { /* ... */ }。而且你不需要转换malloc()的返回值,#include <stdlib.h>要好得多。而(*temp).num可以写成temp->num。 -
哦......你的
printf除了格式字符串之外还需要1个参数,你传递了2个。 -
你不应该在 C 中强制转换 malloc() 的返回值。
-
@pmg 和 @unwind 见stackoverflow.com/questions/1688034/…
-
感谢您的回答和 cmets。为了绝对清楚,我知道我没有为结构分配“标签”或“类型”,而只是声明了一个名为 x 的“变量”或“实例”。因此,无论何时,我都会使用 struct x,因为没有名为 x 的“类型/标签”,所以会让人感到困惑。当“int”本身没有定义时,它就像 int * 一样。我的想法正确吗?所以我看待它的方式是,我所做的只是获取一个名为“x”的特殊类型的变量,通过它我可以访问一个 int、一个 char *、一个 int * 和一个未知指针。这也正确吗?谢谢你的耐心
标签: c pointers structure dereference