文章目录

  • 一、基本概念
  • 二、结构体定义的三种方式(声明后有不能忘了;号)
  • 三、访问结构体成员
  • 四、结构体数组
  • 五、结构体的嵌套

一、基本概念

在C语言中,可以定义结构体类型,将多个相关的类型的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。

二、结构体定义的三种方式(声明后有不能忘了;号)

1、标准定义方式

#include <stdio.h>//结构体类型的声明与定义分开
struct student
{int age;  //年龄float score; //分数char sex;   //性别
};  //结构体类型声明结束int main ()
{//结构体类型变量的定义struct student a={23, 98, 'f'}; printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );return 0;
}

2、声明结构体时定义变量(不环保)

#include <stdio.h>//在结构体的声明时直接定义变量
struct student
{int age;  //年龄float score;  //分数char sex;   //性别
} a={23, 87,'n'};  //声明结构体时直接定义变量a,并赋初值int main()
{//在main函数中直接调用定义好的结构体变量aprintf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
}

3、无类型名的结构体(此法最差,只能用一次)

#include <stdio.h>//直接定义结构体变量,没有结构体类型名
struct
{int age;float score;char sex;
} t={23, 98, 'f'};int main ()
{printf("年龄:%d 分数:%f 性别:%c\n", t.age, t.score, t.sex);return 0;
}

4、用typedef给自定义的结构体加一个名字(typedef 已有类型 新类型名)

#include <stdio.h>//在结构体的声明时直接定义变量
typedef struct student
{int age;  //年龄float score;  //分数char sex;   //性别
};  //声明结构体时直接定义变量a,并赋初值int main()
{//定义结构体变量student a={23, 87,'n'};  //此时就可以直接用student这个类型名了//在main函数中直接调用定义好的结构体变量aprintf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex );
}

三、访问结构体成员

用结构成员运算符点“ . ”就可以了:结构体变量名.成员名;
注意,点其结合性是自左至右的,它在所有的运算符中优先级是最高的。
1、一维数组
比如声明了一个结构体student,定义了一个变量stu:

struct student
{char name[10];  //相当于一个字符串,即char型数组int num;  //int型数据,编号int age;  //年龄float score[3];  //3门课的分数char sex;  //性别
} stu;

在这个结构体中,如果要访问第二门课的分数,则需要这样访问:

//输入:
scanf("%f", &stu.score[1]);  //取的是第二门课成绩的地址
//输出:
printf("%f", stu.score[1])  //输出的是第二门课成绩

2、二维数组(同理)
比如声明了一个结构体student,定义了一个变量stu:

struct student
{char name[10];  //相当于一个字符串,即char型数组int num;  //int型数据,编号int age;  //年龄float score[3][2];  //3门课的分数,都有两次测验char sex;  //性别
} stu;
//输入:
scanf("%f", &stu.score[1][1]);  //取的是第二门课第二次测验成绩的地址
//输出:
printf("%f", stu.score[1][1])  //输出的是第二门课第二次测验的成绩

3、其他更高维数组的用法都是一样的道理,以此类推。

四、结构体数组

比如声明了一个结构体student,定义了一个结构体变量数组stu[3]:

struct student
{char name[10];  //相当于一个字符串,即char型数组int num;  //int型数据,编号int age;  //年龄float score[3][2];  //3门课的分数,都有两次测验char sex;  //性别
} stu[3];

这里的stu就是一个结构体数组,包含了3个student类型的结构体变量。
接下来我们试着访问第3个结构体变量的第1门课第2次测验的成绩:

//输入:
scanf("%f", &stu[2].score[0][1]);  //取的是第三个结构体变量第一门课第二次测验成绩的地址
//输出:
printf("%f", stu[2].score[0][1])  //输出的是第三个结构体变量第一门课第二次测验的成绩

五、结构体的嵌套

比如声明了一个结构体student,里面包含了一个结构体GoodStudent,里面声明了好学生的名字和成绩,同时定义了一个结构体变量数组stu[3]:

struct student
{int num;  //int型数据,编号int age;  //年龄char sex;  //性别struct GoodStudent{char name[10];  //相当于一个字符串,即char型数组float score[3][2];  //3门课的分数,都有两次测验}
} stu[3];

此时要访问结构体GoodStudent好学生中的成绩,仍然是用“ . ”成员访问符来访问。

比如要访问第2个结构体变量的好学生的第2门课第1次测验的成绩:

//输入:
scanf("%f", &stu[1].GoodStudent.score[1][0]);  //取的是第2个结构体变量的好学生的第2门课第1次测验的成绩的地址
//输出:
printf("%f", stu[1].GoodStudent.score[1][0])  //输出的是第2个结构体变量的好学生的第2门课第1次测验的成绩成绩

C语言结构体(struct)类型的各种用法相关推荐

  1. C语言 结构体Struct 中冒号的用法

    C语言 结构体Struct 中冒号的用法 本文有部分内容参考菜鸟教程-C 位域 . 关于"位域"的说明 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位. ...

  2. c语言结构体定义蚂蚁,C语言结构体(struct)常见使用方法

    C语言结构体(struct)常见使用方法 C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合) ...

  3. C语言 结构体 struct Cat cat1;

    引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案 ...

  4. C语言结构体struct详解与实例

    目录 1.定义 2.应用 2.1初始化 2.2使用 3.结构体对齐规则与存储 1.定义 C语言中结构体(struct关键字定义)是一种自定义数据类型.通过结构体的定义可以将多种不同类型数据形成一个组合 ...

  5. 关于C语言结构体(struct)介绍

    转自:微点阅读  https://www.weidianyuedu.com 导读:       C语言结构体,怎么理解? 你可以把它想象成一个桌面上的文件夹,这个文件夹里面可以有各种各样的文件,当然也 ...

  6. C语言——结构体struct与typedef的使用

    我们常常在某些C语言代码中看到有时候typedef关键字和struct一起连用定义结构体,有时候只用struct关键字直接定义结构体,在此记录两者的一些用法,给自己做一个笔记,希望对大家也有所帮助.如 ...

  7. C语言结构体struct详解

    目录 一.struct的概念 1.类比: 2.含义详解: 二.结构体变量的定义 1.创建结构体类型的时候定义 2.具体使用的时候定义 三.如何得到结构体成员? 1.通过 . 点操作符得到结构体成员 2 ...

  8. C语言怎么存储结构体,C语言结构体Struct怎么使用?

    在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为:struct结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相 ...

  9. C语言 结构体struct总结

    文章目录 一.前言 二.结构体的引入 三.结构体声明 四.结构体变量的定义 五.结构体变量的初始化 六.结构体变量成员的访问 七.结构体存储原理 八.结构体数组 8.1结构体数组的定义 8.2结构体数 ...

  10. 关于C语言——结构体struct的大小是如何计算的

    C语言中的内存是比较复杂的,能够认识了解内存,对学习C语言能有莫大的帮助! 关于结构体的大小有如下规律: 1.结构体的大小是由n个"结构体中最大的那个类型"的大小模块组成(n< ...

最新文章

  1. javascript DOM 编程艺术 札记2 平稳退化
  2. SaltStack 安装、简单配置和远程执行
  3. html 自定义标签解析,Java解析Html自定义标签的属性
  4. JSONPATH使用方法
  5. python人工智能——机器学习——机器学习基础
  6. MongoDB 去重(distinct)查询后求总数(count)
  7. 微信小程序-配置请求合法域名的问题以及豆瓣api问题
  8. c#SqlServer总结
  9. 用户故事与敏捷方法—一些用户故事(实战二)
  10. 【终于等到你】微信转发语音的方法 - 语音信息转发
  11. 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
  12. Oracle 使用 PL/SQL Developer 生成 AWR 报告
  13. excel锁定单元格不能修改_Excel如何锁定部分区域不被编辑,1分钟就学会
  14. Fine-grained prosody modeling
  15. Docker参数 -i -t 的作用
  16. Python中用PyPDF2拆分pdf提取页面
  17. 在2147483647的边缘疯狂试探
  18. 分类任务中的类别不平衡问题
  19. 写给二线城市【Python工程师】的成长指南
  20. Android 复杂的手势处理利用GestureOverView

热门文章

  1. 小程序picker下拉框选择时间,只需要年和月
  2. 计算机应用基础工作页,计算机应用基础工作页
  3. java打印正三角形_java实现打印正三角的方法
  4. tensorflow 转张量类型为float_一文看懂TensorFlow计算图
  5. 修改外部时间服务器地址,修改外部时间服务器地址
  6. Android点击图片随机,android 设置图片随机出现-两种方式
  7. c语言黑色星期五公式,求黑色星期五问题~
  8. div 位于屏幕正中间_折叠屏已经不新鲜了,明天你可能会用上“伸缩屏幕”!...
  9. mysql poolsize_thread_pool_size的调整
  10. Shrink space合并表的碎片