[C语言入门] 结构体
目录
1. 啥是结构体
2. 啥是结构体变量
3. 创建结构体变量的小细节
3.1 创建全局结构体变量(不推荐)
3.2 创建局部结构体变量(不推荐)
3.3 创建局部结构体变量Plus
4. 结构体在内存里面咋存?
5. 结构体作为参数进行传递
5.1 结构体直接传参
5.2 结构体的地址传参
1. 啥是结构体
结构体就是数据的集合,可以类比一下数组,数组是相同类型的集合;结构体对数据的异同没有任何要求;也就是说结构体是不同/相同类型的集合。
2. 啥是结构体变量
如果你学过面向对象的语言,可以把结构体变量理解为对象;如果你没有学过,那么可以把结构体理解为模版,结构体变量理解为根据模版来做的一些具体的东西;例如结构体人类,结构体变量张三,就是根据结构体人类模版来进行“制作”的具体的人。
#include <stdlib.h>
#include<string.h>// 结构体struct Person{char name[20]; };int main()
{struct Person zhangsan = {"zhangsan"}; // 结构体变量张三,是由结构体人类模版“制作”的printf("%s",zhangsan.name);return(0);
}
3. 创建结构体变量的小细节
3.1 创建全局结构体变量(不推荐)
我们可以在写结构体的时候顺便把结构体变量定义了,这时候的结构体变量是“全局”的,存在一些问题。
#include <stdlib.h>// 结构体struct Person{char name[20]; }p1,p2; // 全局结构体变量
3.2 创建局部结构体变量(不推荐)
虽然作用域从全局到了局部,但是写起来还是有点麻烦。
#include <stdlib.h>// 结构体struct Person{char name[20]; };int main()
{struct Person p1,p2;// 局部结构体变量return 0;
}
3.3 创建局部结构体变量Plus
使用typedef 来简化创建结构体变量的流程。
#include <stdlib.h>// 结构体typedef struct Person{char name[20]; }P;int main()
{P p1,p2;// 局部结构体变量return 0;
}
4. 结构体在内存里面咋存?
结构体本身在内存里面并不占用任何空间,当使用结构体创建结构体变量的时候,结构体变量占用内存空间,占用的内存空间跟结构体内的成员变量的大小总和一样。这很好理解,想象一下你拿着一个重量忽略不计的模具,此时重量为0,一旦使用这个模具制作一些“巧克力”、“冰块”,此时这些“巧克力、冰块”就有了重量。
5. 结构体作为参数进行传递
5.1 结构体直接传参
和普通变量传值一样,会额外创建一个临时的结构体变量,如果这个结构体变量占用内存很多,那么临时结构体变量就会占用那么多空间,不推荐。
#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20];
}P;
// 使用结构体直接传参
void print_1(struct Person p1)// 形参:P p1也是可以的
{printf("%s\n",p1.name);
}int main()
{P z = {"张三"};print_1(z);return(0);
}
5.2 结构体的地址传参
使用地址传参,这样就需要创建一个指针变量,而指针变量的大小是一定的(4或者8个字节),所以不用担心内存占用的问题。
#include <stdlib.h>
#include<string.h>
typedef struct Person
{char name[20];
}P;// 使用结构体地址传参
void print_2(struct Person* p1)// 形参:P p1也是可以的
{printf("%s\n",p1->name);
}int main()
{P l = {"李四"};print_2(&l);return(0);
}