结构体:管理不同类型的数据(同一对象不同属性);
作用:可以对不同类型且有关联的数据进行操作管理;
怎么用?
如何定义一个结构体类型?
struct 标识符{
属性类型1 属性名1;
属性类型2 属性名2;
};如: - #include <stdio.h>
- int main(int argc,const char* argv[]){
- struct person{
- char* name;
- int age;
- };
- //通过结构体 标识符 变量名={属性1,属性2};来定义结构体变量
- struct person per1={"八戒",2000};
- //通过变量名.属性名来获取属性值
- printf("%s\n",per1.name);
- printf("%d\n",per1.age);
- //还可以创建类型的同时创建对象
- struct pig{
- char* name;
- int age;
- }pig1={"小黑",4};
- //创建匿名结构体
- //同一作用域内可以创建无数个匿名结构体
- //1
- struct {
- int test;
- }myTest={100};
- //2
- struct {
- int test;
- }myTest;
- myTest={100};
- return 0;
- }
如何赋值?
通过变量名.属性名进行赋值,如
per1.age=10000;
但是,因为字符串是一个常量,所以在进行重新赋值的话,这样方法不大适用,可以用字符串拷贝来赋值,如:
strcpy(per.name,“悟空”); 如何定义一个结构体数组元素类型 变量名[长度]; - #include <stdio.h>
- int main(int argc,const char* argv[]){
- struct person arr[3]={p1,p2,p3};
- for(int i=0;i<3;i++){
- printf("%s\n",arr[i].name);
- }
- return 0;
- }
结构体内存分析结构体内存寻址及分配与别的数据类型不大一样:必须遵循对齐算法的两个原则,即:
1.当前一个元素相对于结构体首字节的偏移量必须是其本身所占字节的整数倍; 偏移量:元素第1个字节与结构体首字节之间的字节数
2.当前整个结构体所占用的字节数必须是其占用最大字节数的元素整数倍;
|