C语言结构体(struct)类型的各种用法
文章目录
- 一、基本概念
- 二、结构体定义的三种方式(声明后有不能忘了;号)
- 三、访问结构体成员
- 四、结构体数组
- 五、结构体的嵌套
一、基本概念
在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)类型的各种用法相关推荐
- C语言 结构体Struct 中冒号的用法
C语言 结构体Struct 中冒号的用法 本文有部分内容参考菜鸟教程-C 位域 . 关于"位域"的说明 有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位. ...
- c语言结构体定义蚂蚁,C语言结构体(struct)常见使用方法
C语言结构体(struct)常见使用方法 C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合) ...
- C语言 结构体 struct Cat cat1;
引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案 ...
- C语言结构体struct详解与实例
目录 1.定义 2.应用 2.1初始化 2.2使用 3.结构体对齐规则与存储 1.定义 C语言中结构体(struct关键字定义)是一种自定义数据类型.通过结构体的定义可以将多种不同类型数据形成一个组合 ...
- 关于C语言结构体(struct)介绍
转自:微点阅读 https://www.weidianyuedu.com 导读: C语言结构体,怎么理解? 你可以把它想象成一个桌面上的文件夹,这个文件夹里面可以有各种各样的文件,当然也 ...
- C语言——结构体struct与typedef的使用
我们常常在某些C语言代码中看到有时候typedef关键字和struct一起连用定义结构体,有时候只用struct关键字直接定义结构体,在此记录两者的一些用法,给自己做一个笔记,希望对大家也有所帮助.如 ...
- C语言结构体struct详解
目录 一.struct的概念 1.类比: 2.含义详解: 二.结构体变量的定义 1.创建结构体类型的时候定义 2.具体使用的时候定义 三.如何得到结构体成员? 1.通过 . 点操作符得到结构体成员 2 ...
- C语言怎么存储结构体,C语言结构体Struct怎么使用?
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为:struct结构体名{结构体所包含的变量或数组};结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相 ...
- C语言 结构体struct总结
文章目录 一.前言 二.结构体的引入 三.结构体声明 四.结构体变量的定义 五.结构体变量的初始化 六.结构体变量成员的访问 七.结构体存储原理 八.结构体数组 8.1结构体数组的定义 8.2结构体数 ...
- 关于C语言——结构体struct的大小是如何计算的
C语言中的内存是比较复杂的,能够认识了解内存,对学习C语言能有莫大的帮助! 关于结构体的大小有如下规律: 1.结构体的大小是由n个"结构体中最大的那个类型"的大小模块组成(n< ...
最新文章
- javascript DOM 编程艺术 札记2 平稳退化
- SaltStack 安装、简单配置和远程执行
- html 自定义标签解析,Java解析Html自定义标签的属性
- JSONPATH使用方法
- python人工智能——机器学习——机器学习基础
- MongoDB 去重(distinct)查询后求总数(count)
- 微信小程序-配置请求合法域名的问题以及豆瓣api问题
- c#SqlServer总结
- 用户故事与敏捷方法—一些用户故事(实战二)
- 【终于等到你】微信转发语音的方法 - 语音信息转发
- 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
- Oracle 使用 PL/SQL Developer 生成 AWR 报告
- excel锁定单元格不能修改_Excel如何锁定部分区域不被编辑,1分钟就学会
- Fine-grained prosody modeling
- Docker参数 -i -t 的作用
- Python中用PyPDF2拆分pdf提取页面
- 在2147483647的边缘疯狂试探
- 分类任务中的类别不平衡问题
- 写给二线城市【Python工程师】的成长指南
- Android 复杂的手势处理利用GestureOverView
热门文章
- 小程序picker下拉框选择时间,只需要年和月
- 计算机应用基础工作页,计算机应用基础工作页
- java打印正三角形_java实现打印正三角的方法
- tensorflow 转张量类型为float_一文看懂TensorFlow计算图
- 修改外部时间服务器地址,修改外部时间服务器地址
- Android点击图片随机,android 设置图片随机出现-两种方式
- c语言黑色星期五公式,求黑色星期五问题~
- div 位于屏幕正中间_折叠屏已经不新鲜了,明天你可能会用上“伸缩屏幕”!...
- mysql poolsize_thread_pool_size的调整
- Shrink space合并表的碎片