六、结构体的使用

1.一般对结构体变量的操作是以成员为单位进行的,引用的一般形式为:结构体变量名.成员名

1 struct Student {

2 char *name;

3 int age;

4 };

5

6 struct Student stu;

7

8 // 访问stu的age成员

9 stu.age = 27;

第9行对结构体的age成员进行了赋值。"."称为成员运算符,它在所有运算符中优先级最高

2.如果某个成员也是结构体变量,可以连续使用成员运算符"."访问最低一级成员

1 struct Date {

2 int year;

3 int month;

4 int day;

5 };

6

7 struct Student {

8 char *name;

9 struct Date birthday;

10 };

11

12 struct Student stu;

13

14 stu.birthday.year = 1986;

15 stu.birthday.month = 9;

16 stu.birthday.day = 10;

注意第14行以后的代码

3.相同类型的结构体变量之间可以进行整体赋值

1 struct Student {

2 char *name;

3 int age;

4 };

5

6 struct Student stu1 = {"MJ", 27};

7

8 // 将stu1直接赋值给stu2

9 struct Student stu2 = stu1;

10

11 printf("age is %d", stu2.age);

注意第9行。输出结果为:

七、结构体数组

1.定义

跟结构体变量一样,结构体数组也有3种定义方式

struct Student {

char *name;

int age;

};

struct Student stu[5]; //定义1

struct Student {

char *name;

int age;

} stu[5]; //定义2

struct {

char *name;

int age;

} stu[5]; //定义3

上面3种方式,都是定义了一个变量名为stu的结构体数组,数组元素个数是5

2.初始化

struct {

char *name;

int age;

} stu[2] = { {"MJ", 27}, {"JJ", 30} };

也可以用数组下标访问每一个结构体元素,跟普通数组的用法是一样的

八、结构体作为函数参数

将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。

1 #include

2

3 // 定义一个结构体

4 struct Student {

5 int age;

6 };

7

8 void test(struct Student stu) {

9 printf("修改前的形参:%d \n", stu.age);

10 // 修改实参中的age

11 stu.age = 10;

12

13 printf("修改后的形参:%d \n", stu.age);

14 }

15

16 int main(int argc, const char * argv[]) {

17

18 struct Student stu = {30};

19 printf("修改前的实参:%d \n", stu.age);

20

21 // 调用test函数

22 test(stu);

23

24

25 printf("修改后的实参:%d \n", stu.age);

26 return 0;

27 }

* 首先在第4行定义了一个结构体类型Student

* 在第18行定义了一个结构体变量stu,并在第22行将其作为实参传入到test函数

输出结果为:

,形参是改变了,但是实参一直没有变过

九、指向结构体的指针

* 每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量

* 结构体指针变量的定义形式:struct 结构体名称 *指针变量名

* 有了指向结构体的指针,那么就有3种访问结构体成员的方式

结构体变量名.成员名

(*指针变量名).成员名

指针变量名->成员名

1 #include

2

3 int main(int argc, const char * argv[]) {

4 // 定义一个结构体类型

5 struct Student {

6 char *name;

7 int age;

8 };

9

10 // 定义一个结构体变量

11 struct Student stu = {"MJ", 27};

12

13 // 定义一个指向结构体的指针变量

14 struct Student *p;

15

16 // 指向结构体变量stu

17 p = &stu;

18

19 /*

20 这时候可以用3种方式访问结构体的成员

21 */

22 // 方式1:结构体变量名.成员名

23 printf("name=%s, age = %d \n", stu.name, stu.age);

24

25 // 方式2:(*指针变量名).成员名

26 printf("name=%s, age = %d \n", (*p).name, (*p).age);

27

28 // 方式3:指针变量名->成员名

29 printf("name=%s, age = %d \n", p->name, p->age);

30

31 return 0;

32 }

c语言有结构体的200行代码,C语言——结构体(示例代码)相关推荐

  1. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码

    PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...

  2. python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  3. python抠图_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  4. Linux下编译build的命令,Linux命令行下编译Android NDK的示例代码

    这几天琢磨写一个Android的Runtime用来加速HTML5 Canvas,让GameBuilder+CanTK 不但开发速度快,运行速度也能接近原生应用.所以花了点时间研究Android NDK ...

  5. ios c语言调用oc方法,ios开发之OC基础-类和对象(示例代码)

    本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...

  6. python绘制像素图_Python用61行代码实现图片像素化的示例代码

    起因 看到网上的像素图片,感觉蛮有趣的,就打算用python一些PIL类库写一个. 实现思路 把一张图片分成多个块,每个块的颜色都等于这个色块中颜色最多的颜色,如下图. 这个图取2×2的像素为块的大小 ...

  7. c语言fmod英文全称,C语言fmod()函数:对浮点数取模(求余)(示例代码)

    头文件:#include fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = n * y + ret,其中 n 是 ...

  8. c语言strsep,C/C++ 字符串分割: strtok 与 strsep 函数说明(示例代码)

    函数原型: char *strtok(char *s, const char *delim); char *strsep(char **s, const char *delim); 功能:strtok ...

  9. r语言error in match.fun(fun) :_Go语言200行写区块链源代码分析

    Github上有一个Repo,是一个使用Go语言(golang),不到200行代码写的区块链源代码,准确的说是174行.原作者起了个名字是 Code your own blockchain in le ...

  10. go语言:200行代码做udp rtp转发并发分布服务器

    使用go做服务器 最近写服务器使用c++多了以后,java和node逐渐被放到一边,最后又做了一个决定,使用go来做服务器,将会使用200行代码不到来做这个并发和分布式服务器,为什么? go语言的优势 ...

最新文章

  1. 使用OUYA第一次启动OUYA
  2. 单例模式(Singleton)
  3. 典型的简单权限分配系统方法介绍
  4. php时间戳防盗链,金山云-文档中心-设置时间戳+共享密钥防盗链
  5. 黑马程序员 Java 加强
  6. RK3288_Android7.1在HAL层audio音频通路小结
  7. debian解决中文乱码,安装chinese font
  8. Java设计模式------单例模式
  9. java新建json 数组_Java创建JSON对象
  10. 算法之数学--常用数学公式,规律神器OEIS 2021-03-09
  11. R语言绘图的中文字体处理
  12. [Codeforces1148C]Crazy Diamond——构造
  13. 性能优化: 资源合并与压缩 -- 压缩(前端开发过程中 JavaScript、HTML、CSS 文件的压缩)
  14. Ruby ERB模板注入检测
  15. FOC——10.11.IR2106半桥预驱电路
  16. LIO-SAM imuPreintegration
  17. Esp8266 进阶之路36【外设篇】乐鑫esp8266芯片SDK编程驱动时间芯片 ds1302,同步网络时间到本地,再也不怕掉电断网也可以同步时间了!(附带Demo)
  18. 简单电话簿管理系统(C语言)
  19. dotnetbar-SuperTabControl禁止调整顺序
  20. CUDA编程:矩阵乘运算从CPU到GPU

热门文章

  1. delphi 中文转 ascii编码_【转】Python 中文编码
  2. flink写入 mysql_基于 Binlog + Flink 实现多表数据同构/异构方案
  3. Dart之字符串(String)的相关方法总结
  4. 一个网卡设备配置两个不同网段的IP地址
  5. shell编程的for和while循环
  6. 神经网络-GoogleNet的发展,介绍,贡献
  7. EF并非我们想象的那么智能
  8. Linux安装Oracle,卡在60%处的解决方法
  9. web安全day43:网络扫描和Nmap的使用
  10. 【php更换数据库为orcle】phpstudy+orcle