C语言结构体讲解

结构体

1.结构体的声明

1.1结构的基础知识

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

复杂对象的描述

1.2结构的声明

struct tag
{
    member_list;//成员列表  
}variable-list//变量列表

//声明的结构体类型
struct Peo
{
    char name[20];
    char tele[20];
    char gender[5];
    int high;
}p1,p2;//变量列表可有可无
//p1,p2是通过struct Peo结构体类型创建的2个变量,是全局变量

创建结构体变量

int main()
{
    struct Peo p1 ;//结构体变量创建
    return 0;
}

总结:其实结构体相当于图纸,里面有各种类型的变量,通过该图纸去创建出不同的结构体变量

1.3结构成员类型

结构成员类型可以是标量,数组,指针,甚至是其他结构体

1.4结构体变量的定义和初始化

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};
struct St
{
	struct Peo p;
	int num;
	float f;
};
int main()
{
	//结构体初始化
	struct Peo p1 = { "张三","12345654321","男",181 };
	struct St s = { { "lis","123r1232113","女",166},100,3.14f };//浮点数在内存中不能精确保存
    printf("%s %S %s %d",p1.name,p1,tele,p1.sex,p1.high);
    printf("%s %S %s %d %d %f",s.p.name,s.p,tele,s.p.sex,s.p.high,s.num,s.f);
	return 0;
}

2.结构体成员的访问

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};
struct St
{
	struct Peo p;
	int num;
	float f;
};
//两种方式的成员访问
//1.地址访问
print2(struct Peo*sp)
{
    printf("%s %S %s %d",p1->name,p1->tele,p1->sex,p1->high);//结构体变量->成员变量
}
//直接访问
print1(struct Peo p)
{
    printf("%s %S %s %d",p.name,p,tele,p.sex,p.high);//结构体变量.成员变量
}
int main()
{
	//结构体初始化
	struct Peo p1 = { "张三","12345654321","男",181 };
	struct St s = { { "lis","123r1232113","女",166},100,3.14f };//浮点数在内存中不能精确保存
    printf("%s %S %s %d",p1.name,p1,tele,p1.sex,p1.high);
    printf("%s %S %s %d %d %f",s.p.name,s.p,tele,s.p.sex,s.p.high,s.num,s.f);
    print1(p1);
    print2(&p1);
	return 0;
}

3.结构体传参

直接看代码

struct Peo
{
	char name[20];
	char tele[12];
	char sex[5];
	int high;
};
//两种方式的成员访问
//1.地址访问
print2(struct Peo*sp)
{
    printf("%s %S %s %d",p1->name,p1->tele,p1->sex,p1->high);//结构体变量->成员变量
}
//直接访问
print1(struct Peo p)
{
    printf("%s %S %s %d",p.name,p,tele,p.sex,p.high);//结构体变量.成员变量
}
int main()
{
	//结构体初始化
	struct Peo p1 = { "张三","12345654321","男",181 };
    print1(p1);
    print2(&p1);
	return 0;
}

上面的print1和print2函数哪个更好

答:首选print2函数

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

结论:结构体传参的时候,要传结构体的地址。
如上述有误,请各位网友指正,谢谢!

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值