一.不加typedef
struct Node {int id[10];char name[10];
}p;
**p是结构体变量 已经定义过了不需要malloc申请空间 **
使用场景
//不需要定义只能静态分配内存在静态区随进程
p.id[0] = 1; // 将 id 数组的第一个元素赋值为 1
strcpy(p.name, "小明"); // 使用 strcpy 来复制字符串
二.加typedef
typedef struct Node {int id[10];char name[10];
}p;
p是结构体类型的别名 a == struct Node 更加方便简捷;
使用场景
p a; //声明了struct Node类型的变量p(这里静态分配但是可以动态分配)
a.id[0] = 1; // 将 id 数组的第一个元素赋值为 1
strncpy(a.name, "小明",); // 使用 strcpy 来复制字符串
三.动态分配malloc
动态分配将内存放到了堆区
优点
- 可调大小
- 全局可用
缺点
需要手动清除
使用场景
typedef struct Node {int id[10];char name[10];
}p;
p *a = malloc(sizeof(c)) //malloc返回一个地址的指针需要一个指针来存储(动态分配内存在堆区随程序全局);和上面的用法进行对比记忆更好理解
a->id[0] = 1; // 将 id 数组的第一个元素赋值为 1
strncpy(a->name, "小明",); // 使用 strcpy 来复制字符串
注意
所有malloc的空间是堆空间全局可以用,再不需要的时候需要free()清除防止内存占用;