C语言结构体

1. 什么是结构体?

        结构体是一种工具,用这个工具可以定义自己的数据类型。

2. 结构体与数组的比较

        (1) 都由多个元素组成

        (2) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同

3. 结构体的定义和使用

struct 结构体名
{
    类型1 成员1;
    类型2 成员2;
    …
    类型n 成员n;
};

例如:

struct Student
{
	char name[20];
	char num[20];
	char sex;
	int math;
};

(1).定义结构体类型时可以同时定义该类型的变量:
 

struct Student
{
	char name[20];
	char num[20];
	char sex;
	int math;
}student,*p,stu[10];//定义结构体类型的普通变量、指针变量和数组

(2).也可以先定义结构体类型,在定义该类型的变量

struct Student
{
	char name[20];
	char num[20];
	char sex;
	int math;
};
struct Student student,*p,stu[10];

(3).使用typedef定义别名,再用别名定义该类型的变量

typedef struct Student
{
	char name[20];
	char num[20];
	char sex;
	int math;
}stud;
stud student,*p,stu[10];

4.初始化结构体

struct Student
{
	char name[20];
	char num[20];
	char sex;
	int math;
}stu[2]={{"xiaoming",1,'m',100},{"xiaohong",2,'w',100}};

5.引用结构体变量中的成员

1) 结构体变量名成员名:      stu1.name

2) (*结构体指针变量)成员名: (*ps).name

3) 结构体指针变量->成员名:    ps->name

4) 结构体变量数组名成员名: stu[0].name

6.结构体变量所占内存空间问题

#include<stdio.h>
struct Student
{
	char name;
	char num;
	char sex;
	int math;
};
int main()
{
	struct Student a;
	printf("%d",sizeof(a));
	getchar();
	return 0;
}
#include<stdio.h>
struct Student
{
	char name;
	char num;
	int math;
	char sex;
};
int main()
{
	struct Student a;
	printf("%d",sizeof(a));
	getchar();
	return 0;
}

     上面两个代码,结构体中定义变量的顺序不同,导致输出结果不同,第一个代码输出结果,结构体a占8个字节,而第二个占12个字节。原因是该结构体中,数据类型占字节最大的是int型(4个字节),所以一次开辟4个字节;(1).char name占一个字节,开辟四个字节,剩3个字节,后面的char num和char sex可以在剩余的3个字节内进行补充,最后int math再开辟4个字节,所以一共占8个字节。(2).char name占1个字节,开辟4个字节后,剩3个字节;char num占一个字节,之前剩3个字节,num可以进行补充;int math占4个字节,开辟4个字节;char sex占一个字节,再开辟4个字节,所以是12个字节。

下面用图来说明

代码1:

代码2:

结论:结构体所占内存一定为最大成员所占字节数的倍数。

注意:在使用结构体时,各成员相同数据类型应该放在一起,这样可以减少空间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值