当前位置: 首页 > news >正文

第十九章(自定义类型:结构体)

1. 结构体类型的声明

2. 结构体变量的创建和初始化

3. 结构成员访问操作符

4. 结构体内存对⻬

5. 结构体传参

一、结构体类型的声明

1.1结构体的声明

struct student
{int age;int id[10];char name[10];
};

1.2 结构体变量的初始化

struct student
{int age;char id[10];char name[10];
};int main()
{// 1. 按照顺序初始化struct student s = { 18,"22021111","张三" };printf("%d %s %s\n", s.age, s.id, s.name);//2. 不按顺序初始化 struct student s1 = { .id = "2222555",.age = 28,.name = "王五"};printf("%d %s %s\n", s1.age, s1.id, s1.name);return 0 ;
}

三、这里我们在原来的知识中已经介绍过了

这里我们需要注意的是,我们在使用结构体的时候,尽量要给结构体变量命名。

四、结构体内存对齐
我们通过上边的学习已经初步掌握了结构体的基本使用了。
现在我们深入讨论一个问题:计算结构体的大小。
这也是一个特别热门的考点:结构体内存对齐

4.1 结构对齐
我们首先需要知道对齐规则
注意:这里需求到一个偏移量的知识
在这里插入图片描述
我们来举例子练习一下

#include<stdio.h>
struct s1
{char a1;int  a2;int a3;
};
int main()
{printf("%zd\n", sizeof(struct s1));return 0;
}

在这里插入图片描述

struct s3
{char nun1;int  nun2;double nun3;
};
int main()
{printf("%zd\n", sizeof(struct s3));return 0;
}

在这里插入图片描述
在这里插入图片描述

struct s3
{char nun1;int  nun2;double nun3;
};struct s4
{char b1;struct s3;int b2;
};
int main()
{printf("%zd\n", sizeof(struct s4));return 0;
}

在这里插入图片描述

在这里插入图片描述

五、结构体传参
我们从两方面解释
1.传值
2.传址

struct s1
{int a ;char name[20];
};
void print_data(struct s1 num)//传值
{num.a = 20;printf("%d\n", num.a);
}
void print_score(struct s1* pr)  //传址
{pr->a = 30;printf("%d\n", pr->a);}
int main()
{struct s1 num = { 10,"lisi" };print_data(num);printf("%d\n", num.a);print_score(&num);printf("%d\n", num.a);return 0;
}

结论:在我们传参的时候,要传结构体的地址


http://www.mrgr.cn/news/40554.html

相关文章:

  • 今日指数项目项目集成RabbitMQ与CaffienCatch
  • 【漏洞复现】泛微OA E-Office do_excel.php 任意文件写入漏洞
  • 编码能力提升计划 - 华为OD统一考试(E卷)
  • C++入门基础 (超详解)
  • Trilium Notes笔记本地化部署与简单使用指南打造个人知识库
  • Spring Boot与足球青训后台系统的协同
  • IPv4与TCP数据包结构解析
  • 计算机视觉(CV)技术的优势和挑战
  • 2024北京市赛 A.不要玩弄字符串
  • 【DCGAN 生成漫画头像】
  • 拥抱可持续创新,数据驱动未来——The Open Group 2024生态系统架构·可持续发展年度大会盛情邀约
  • ubuntu 24.04如何分配内存
  • 对个人来说,炒股有赚钱的吗,个人炒股真能赚到钱吗
  • TIM(Timer)定时器的原理
  • C语言进阶【8】--联合体和枚举(联合体和枚举这么好用,你不想了解一下吗?)
  • 为啥数据需转换成tensor才能参与后续建模训练
  • 基于JAVA+SpringBoot+Vue的社区养老服务平台
  • 力扣10.1
  • 点可云ERP进销存V8版本—其他入库单的操作使用及各单据状态说明
  • 社区医院信息管理:SpringBoot开发指南