关于C初学者结构体的理解

大家好!这里笨鸟先飞,这次为大家来带结构体的博客,适合C语言初学者。

你才25岁,你可以成为任何你想成为的人。《步履不停》

20200808071554_qdjzk

结构体的概念:

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

结构是一种集合,数组是一组相同类型元素的集合。

像生活中一些复杂复杂对象比如说人,想要描述一个人:我们得知道名字+性别+电话+身高

这个时候就无法使用数组,C语言提供了一种描述复杂对象的代码就是结构体

结构体声明

struct tag
{
    member -list //成员列表
}veriable -list //变量列表
    //用这个表述可能不太容易理解
    //举例子给大家把还是

例如说描述一个人:

//声明的结构体类型struct peo 
struct peo  
{
    char name[10];
    char tele[20];
    char sex [5];
    int high;
}//这个后面可以创建变量,例如给个p1,p2变量,并且是两个全局的结构体变量
int main()
{
    struct peo p1;//结构体变量的创建    
}

结构成员的类型

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

struct peo
{
	char name[20];
	char tele[20];
	char sex[5];
	int hight;
};
struct St
{
	struct peo p;//结构体成员可以是结构体
	int num;
	float f;
};

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

定义在前面我们其实已经定义过了,初始化就是在结构体变量创建的同时给他赋一个值

struct peo
{
    char name[10];
    char tele[20];
    char sex[5];
    int high;
}p3, p4;
struct peo p5, p6;
//这里p3,p4,p5,p6其实就是结构体变量,并且是全局变量,只是创建的方式略微有所不同。
struct St
{
    struct peo p;//结构体成员可以是结构体
    int num;
    float f;
};
int main()
{
    struct peo p1={"张三","15577885544","男",181};//这里给结构体变量p1里面放值其实就是初始化的过程
    //这里是结构体中有结构体变量,我们先给一个方括号访问里面的结构体,然后在给一个方括号才能初始化里面的
    //结构体变量。
    struct St s = { {"李四","15544556654","男",171},100,3.14 };
}
//这个时候已经把初始化的值放进去了,我们可以调试看看

image-20220529171301699

结构体成员的访问

结构体变量访问成员 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

我们仍然是用上面的例子具体的来为大家说明结构体成员如何访问

struct peo
{
    char name[10];
    char tele[20];
    char sex[5];
    int high;
};
struct St
{
    struct peo p;
    int num;
    float f;
};
void print2(struct peo* sp)
{
    printf("%s %s %s %d\n", sp->name, sp->tele, sp->sex, sp->high);//结构体指针->成员变量
}
void print1(struct peo p)
{
    printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);//结构体变量.成员变量
}
int main()
{
    struct peo p1 = { "张三","15577885544","男",181 };
    struct St s = { {"李四","15544556654","男",171},100,3.14 };
    //通过结构体变量p1去访问成员的姓名,电话....运用到了.操作符
    printf("%s %s %s %d\n", p1.name, p1.tele, p1.sex, p1.high);
    printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
    print1(p1);
    print2(&p1);
}

image-20220529173937335

上面为大家讲述结构体变量访问成员变量,结构体指针访问成员变量,并且都能够访问成功,希望大家能够灵活运用。

结构体传参

image-20220529175005681

上面的print1和print2函数那个好一些?

答案:选择print2函数

原因:

函数传参的时侯,参数是需要压栈的。

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

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

20200620164530_tulqg

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值