一、“.”和“->”区别:
当声明一个结构体时,因为自动分配了结构体的内存空间,所以可以直接用“.”访问相应结构体内的存储单元,比如:
typedef struct Node{
int value;
}node;
node o;
o.value=2;
但如果声明的是一个结构体指针,则需要手动开辟一个结构体内存后,将这个指针指向该内存块后,再使用“->”进行内部变量访问,同时 (*o).value 等价于 o->value。
node *o;
o->value=2;
二、结构体指针必须初始化:
#include <stdio.h>
typedef struct Node{
int value;
}node;
int main(){
node *o;
o->value=2;
printf("%d",o->value);
return0;
}
这段代码编译没问题,运行却出错,为什么呢?
定义了一个结构体指针o用来指向一个node结构体,但是你却没有给他赋值,系统只知道“o应该是一个node结构体内存单元的首地址”,但是地址是多少呢,还没有分配,所以此时o的值为NULL或者随机数,*o指