54-结构体

54-1 基础知识

结构是一些值的集合,这些值成为成员变量。结构的每个成员可以是不同类型的变量。

内置类型:

char

short

int 

long long

float

double

复杂对象:

人:名字+电话+性别+身高

书:书名+作者+定价+书号

复杂对象的描述就会用到结构体。

54-2 结构体的语法形式

struct tag
{
    member-list
}variable-list;

举例:

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
}p1,p2;  //此时p1、p2是全局的结构体变量,不建议

 54-3 结构体变量的创建

struct Peo  //声明结构体类型,只是个模版,不占用内存空间
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};

int main()
{
	struct Peo p1 = { 0 };  //创建结构体变量,向内存申请空间
	return 0;
}

54-4 结构体成员的类型

可以是标量、数组、指针,甚至是其他结构体

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};

struct Stu
{
	struct Peo p;
	int num;
	float f;
};

 54-5 结构体变量的初始化

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};

struct Stu
{
	struct Peo p;
	int num;
	float f;
};

int main()
{
	struct Peo p1 = { "张三","16529232121","男",181 };
	struct Stu p2 = { {"李四","16529232123","女",170},100,3.14f};
	return 0;
}

打印:

代码:

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};

struct Stu
{
	struct Peo p;
	int num;
	float f;
};
int main()
{
	struct Peo p1 = { "张三","16529232121","男",181 };
	struct Stu p2 = { {"李四","16529232123","女",170},100,3.14f };
	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
	printf("%s %s %s %d %d %f\n", p2.p.name, p2.p.tele, p2.p.sex, p2.p.high,p2.num ,p2.f );
	return 0;
}

结果:

54-6 结构体成员的访问

.与->操作符

代码:

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};

struct Stu
{
	struct Peo p;
	int num;
	float f;
};

void print1(struct Peo p1)
{
	printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);  //结构体变量.成员变量
}

void print2(struct Peo* p1)
{
	printf("%s %s %s %d\n", p1->name, p1->tele, p1->sex, p1->high);  //结构体指针->成员变量
}

int main()
{
	struct Peo p1 = { "张三","16529232121","男",181 };
	print1(p1);
	print2(&p1);
	return 0;
}

结果:

 54-7 结构体传参

问:54-6中的print1和print2函数哪个好些?

答案:首选print2函数

原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降

结论:结构体传参的时候,要传结构体的地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值