struct加typedef和不加的区别

一.不加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
动态分配将内存放到了堆区
优点

  1. 可调大小
  2. 全局可用

缺点

  1. 需要手动清除
    使用场景
typedef struct Node {
    int id[10];
    char name[10];
}p; 
p *a = malloc(sizeof(p))   //malloc返回一个地址的指针需要一个指针来存储(动态分配内存在堆区随程序全局);和上面的用法进行对比记忆更好理解
a->id[0] = 1; // 将 id 数组的第一个元素赋值为 1  
strncpy(a->name, "小明",); // 使用 strcpy 来复制字符串  

注意
所有malloc的空间是堆空间全局可以用,再不需要的时候需要free()清除防止内存占用;

posted @ 2025-01-04 20:31  不二铁子  阅读(72)  评论(0)    收藏  举报