C语言——结构体

文章介绍了C语言中结构体的概念,包括如何定义结构体、创建结构体对象,以及结构体成员的类型。通过示例展示了结构体成员的访问方式,如使用`.`操作符和`->`操作符,以及通过函数传参访问结构体的两种方法,并讨论了传值调用与传址调用的效率差异。
摘要由CSDN通过智能技术生成

目录

什么是结构体

结构体内定义结构体

结构体创建对象

结构体的成员类型

结构体的定义和初始化

通过结构体来访问对象

 通过->字符来访问结构体

 通过函数来访问结构体进行打印的两种方法


什么是结构体

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

struct Student
{    //成员变量;
    char name[10];
    int  age;
    char id[10];

}l1,l2;//这里创建的也是两个结构体变量;
//这里创建的是全局变量;

结构体内定义结构体

struct B {
    char a;
    int price;
};
struct Student
{    //成员变量;
    struct B b;
    char name[10];
    int  age;
    char id[10];

}l1, l2;//这里创建的也是两个结构体变量;
//这里创建的是全局变量;

结构体创建对象

struct Student s;//对象,但是局部变量;

结构体的成员类型

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

结构体的定义和初始化

int main()
{
    struct Student s = { "张三",20,"201304010" };//初始化结构体;
    return 0;
}

通过结构体来访问对象

        结构体访问变量是通过操作符点来访问成员变量的(.)例如:

 

struct Student s = { {'a',35},"张三",20,"201304010"};//初始化结构体;
    
    printf("%s %d %s", s.name, s.age, s.id);
    return 0;

 通过->字符来访问结构体

int main()
{
    struct Student s = { {'a',35},"张三",20,"201304010"};//初始化结构体;
    
    printf("%s %d %s\n", s.name, s.age, s.id);
    struct Student* p = &s;
    printf("%c %d %s %d %s", p->b.a, p->b.price, p->name,p->age, p->id);
    return 0;
}

运行结果

 通过函数来访问结构体进行打印的两种方法

#include<stdio.h>
struct B {
    char a;
    int price;
};
struct Student
{    //成员变量;
    struct B b;
    char name[10];
    int  age;
    char id[10];

}l1, l2;//这里创建的也是两个结构体变量;
//这里创建的是全局变量;
void printf1(struct Student t)
{
    printf("%s %d %s\n", t.name, t.age, t.id);
}
void printf2(struct Student* ps)
{
    printf("%c %d %s %d %s", ps->b.a, ps->b.price, ps->name, ps->age, ps->id);
}
int main()
{
    struct Student s = { {'a',35},"张三",20,"201304010"};//初始化结构体;
    
    printf("%s %d %s\n", s.name, s.age, s.id);
    struct Student* p = &s;
    printf("%c %d %s %d %s\n", p->b.a, p->b.price, p->name,p->age, p->id);
    printf1(s);//传值调用
    printf2(&s);//传址调用
    return 0;
}

打印结果

 

 两种方法的比较

第一种paintf1(s)的方法是需要重新开辟一个空间来进行传值(空间和时间的双重让费)

二第二种方法只需要传递一个s的地址(指针大小的空间)比第一种传参的效率更高。

第二种可以改变主函数里面s的参数。

栈的特点:是一种数据结构。先进的后出,后进的先出

例如

        

 

 结果:

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

所以:在进行传参的时候要传地址;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值