C语言初阶结构体

一,结构体的声明

1.结构的基础知识

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

我们知道数组是用来存放一组相同类型元素的集合,如int,char,float....

而在现实生活中有很多复杂的对象,比如人有很多的属性,这些属性的类型也不完全相同。这个时候我们就要用到结构体了。

人:名字,电话,性别,身高.......//名字,电话,性别为char类型,身高为int类型。

2.结构的声明

模板为:

struct tag    //struct(不可变)为结构体关键字    tag(可变)为结构体标签     一起构成结构体类型

{

        member-list;        //成员列表(一个或多个)

}variable-list;        //变量列表(一个或多个),就是用上面创建的结构体类型构建的结构体变量

例子:人:名字,电话,性别,身高

struco Peo

{

        char name[20];

        char tele[12];

        char sex[5];

        int high;

}p1,p2;

上面就构建了一个人的结构体,包括了姓名,电话,性别,身高。并且创建了两个结构体变量,p1和p2。

接着就可以在mian()函数中创建结构体变量

int main()

{

        struct Peo p1={0};//创建结构体变量        注意:这时才真实的占用了内存创建了结构体,而上

        return 0;                                                    面结构体的声明是绘制蓝图,无实际内存的占用。

}

3.结构体成员的类型

结构体成员的类型可以是任意合法的数组类型,包括基本数据类型(int,char,float..),指针,数组和其他结构体类型。

struct St

{

        struct Peo p;//struct Peo这个结构体成为了本结构体的结构体成员

        int num;

        float f;

};

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

上面定义了结构体类型,接着就是定义结构体变量,就是常见结构体变量和初始化。

(1)在主函数中定义结构体变量和初始化

int main()

{

        struct Peo p1 = {"张三","18837301874","男",180};

        struct St s = { {"丽丽","15660563728","女",166},100,3.14};

        return 0;

}

(2)在定义结构体时就定义结构体变量,然后在主函数中初始化

struco Peo

{

        char name[20];

        char tele[12];

        char sex[5];

        int high;

}p1;//定义struco Peo结构体时就定义结构体变量p1

struct St

{

        struct Peo p;//struct Peo这个结构体成为了本结构体的结构体成员

        int num;

        float f;

}s;//定义struct St结构体时就定义结构体变量s

在主函数中初始化

int main()

{

        p1 = {"张三","18837301874","男",180};

        s = { {"丽丽","15660563728","女",166},100,3.14};

        return 0;

}

二,结构体成员的访问

在定义好结构体,创建结构体变量并且初始化之后,我们要看看结构体的数据是否正确。

打印结构体的成员

int main()

{

        //利用结构体对象.结构体成员

        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);

        return 0;

}

void print1(struct Peo* ps)

{

        printf("%s %s %s %d",ps->name,ps->tele,ps->sex,ps->high);

}

三,结构体传参

上面已经用到了结构体传参了,就是print1函数的使用。

其中print1()函数的参数是结构体的地址,就是用结构体指针。

下面的print2()函数的参数是结构体对象

void print2(struct Peo p)//会拷贝实参,占用内存,会造成空间和时间的浪费。

{

        printf("%s %s %s %d",p.name,p.tele,p.sex,p.high);

}

上面两个函数中,首选print1函数

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

结论:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值