学习C(十五)

结构体

结构体是一种由多个数据类型及数据复合而成的自定义数据类型。
  他可以用来描述一个属性复杂的对象
  例如:描述人类,需要用到int height,int weight,int age,char sex,char name[20]来描述一个人,那么我就应该把以上5个数据,分别为3个int 21个char封装成一个结构体类型,然后用该结构体去声明一个变量,该变量就能描述一个人类
  结构体的自定义方式:
  struct+结构体名{
    具体的成员属性;
  }
  由于自定义的结构体是一个数据类型,他必须全局使用,所以通常情况下,会把自定义部分放在主函数外部
  一个结构体中,可以包含任意类型的数据,但是不能包含自身结构体类型

结构体的内存管理

结构体在开辟内存的时候,会找到结构体内最大的数据,并开辟一段内存。然后将数据从上到下进行存储,空间不足,则继续开辟另一段
    结构体在存放数据的时候,严格遵循字节对齐原则:88,44,22,11对齐

#include<stdio.h>

struct Data1{//这里最大的类型为double,8个字节
	int a;//8
	double b;//8
	char c;//8
	int d;
	int e;//8
	short f;
	short g;
	int h;//8
	char i;
	int j;//8
};

struct Data2{//这里最大的类型为double,8个字节
	int a[25];//12*8+8
	double b;//8
	int c[25];//12*8+8
};

//这样定义结构体,到定义结构体变量有两个方式
//struct Data4 变量名
//data4 变量名
typedef struct Data3{//这里最大的类型为struct Data2结构体类型里的double,8个字节
	struct Data2 p;//216
	int a;//8,
}data3;

int main(){
	printf("%d\n",sizeof(struct Data1));//48个字节
	printf("%d\n",sizeof(struct Data2));//216个字节
	printf("%d\n",sizeof(data3));//224个字节
	return 0;
}

结构体的声明及定义

结构体类型名+变量名 = {一一对应的元素的具体值}
  结构体的访问方式:既然已经使用了结构体来描述一个对象,那么就应该能够通过结构体获得该对象拥有的数据中的具体一项数据
  结构体变量.具体成员数据 就能够访问到该结构体变量中的该成员数据具体的值
  结构体属于普通变量,所以他能够整体之间相互赋值

#include<stdio.h>

//定义结构体类型,全局使用
typedef struct Data{
	int height;
	int weight;
	int age;
	char sex;
}Data;

typedef struct Person{
	struct Data data;
	char name[20];
}Person;

int main(){
	//结构体变量的声明及定义
	Data data = {180,150,20,'M'};
	Person p1 = {data,"张三"};//把已经初始化的data结构体整体赋值给p1的成员data
	Person p2 = {0};
	//结构体的使用:结构体变量.具体成员数据
	printf("姓名:%s\n",p1.name);
	printf("年龄:%d\n",p1.data.age);
	//结构体整体赋值
	p2 = p1;
	printf("姓名:%s\n",p2.name);
	printf("年龄:%d\n",p2.data.age);	
	//结构体指针的使用
	Person* p = &p1;
	printf("姓名:%s\n",(*p).name);
	printf("年龄:%d\n",p->data.age);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值