为什么指针不能直接使用->来访问结构体成员?代码如下:
typedef struct node{
int number;
struct node *next;
}A;
int main(void) {
//分配空间
A *a=(A*)malloc(sizeof(A));
a->number=10;
a->next=NULL;
printf("%d\n",a->number);
//不分配空间
A*c;
c->number=12;
c->next=NULL;
printf("%d",c->number);
return 0;
}
结果:
开始运行...
10
Segmentation fault (core dumped)
运行结束。
原因如下:
在c语言中,指针必须要初始化,那我也初始化了,为啥显示存储器区块错误呢?
1.A* c; --结构体指针c所占的字节数和前面的数据类型无关,与系统的寻址能力有关。比如32位的系统,4字节;64位系统,8字节
2.int b[] --b数组本身能够存放int类型的数据,但是c能够存放结构体么?显然不能,c只是一个指针而已,所以我们需要动态分配一块结构体大小的内存,返回该内存的地址。也就是通过动态分配来初始化结构体指针