007+limou+C语言入门知识——(6)结构体

1、结构体的声明

结构体是一些类型的集合,通过这个结构体可以让用户自定义出一个变量类型

struct str
{
    int a;
    char b;
    double c;
};
int main()
{
    struct str s;//可以将struct str整体理解为一个变量类型
    return 0;
}

又例如描述一个人,创建一个“‘人’类型”

struct pep
{
    char name[10];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//身份证
};

2、结构体的初始化

可以像初始化数组一样初始化一个结构体

struct pep
{
    char name[10];//名字
    int age;//年龄
    char sex[5];//性别
    char id[100];//身份证
};
int main()
{
    struct pep p = { "limou", 13, "女", "4465667655453625" };
    return 0;
}

甚至可以嵌套初始化

struct grade
{
    int chinese;
    int math;
};
struct pep
{
    char name[10];//名字
    int age;//年龄
    char sex[5];//性别
    char id[100];//身份证
    struct grade a;
};
int main()
{
    struct pep p = { "limou", 13, "女", "4465667655453625", {100, 120} };
    return 0;
}

在这里插入图片描述

3、结构体成员访问
如果此时我们创建并初始化好一个结构体变量,那么我们应该怎么做才能访问其成员呢?

(1)采用“.”操作符

struct grade
{
    int chinese;
    int math;
};
struct pep
{
    char name[10];//名字
    int age;//年龄
    char sex[5];//性别
    char id[100];//身份证
    struct grade a;
};
int main()
{
    struct pep p = { "limou", 13, "女", "4465667655453625", {100, 120} };
    printf("%s\n", p.name);
    printf("%d\n", p.age);
    printf("%s\n", p.sex);
    printf("%s\n", p.id);
    printf("%d\n", p.a.chinese);
    printf("%d\n", p.a.math);
    return 0;
}

(2)采用“->”操作符

#include <stdio.h>
struct grade
{
    int chinese;
    int math;
};
struct pep
{
    char name[10];//名字
    int age;//年龄
    char sex[5];//性别
    char id[100];//身份证
    struct grade a;
};
int main()
{
    struct pep p = { "limou", 13, "女", "4465667655453625", {100, 120} };
    struct pep* pp = &p;
    printf("%s\n", pp->name);
    printf("%d\n", pp->age);
    printf("%s\n", pp->sex);
    printf("%s\n", pp->id);
    printf("%d\n", pp->a.chinese);
    printf("%d\n", pp->a.math);
    return 0;
}

4、结构体传参

结构体传参可以传递整个结构体(这是为了让结构体变量和普通的变量保持同步)或者结构体的地址

struct S 
{
    int data[1000];
    int num;
};
struct S s = {{1,2,3,4}, 1000};

//结构体传参
void print1(struct S s) 
{
    printf("%d\n", s.num);
}

//结构体地址传参
void print2(struct S* ps) 
{
    printf("%d\n", ps->num);
}
int main()
{
    print1(s);  //传结构体
    print2(&s); //传地址
    return 0; 
}

但如果结构体的大小比较大,一般会使用指针传参会更好(因为省内存,函数在传参的时候,参数是需要压栈的,如果传递一个结构体对象过大,则参数压栈的系统开销会比较大,导致程序性能下降)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

limou3434

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值