C语言的结构变量定义规则,嵌入式学习笔记:c语言结构体的定义和使用
c高级结构体如何来学习,这里分享一些学习笔记,可以轻松学c高级结构体。
【1】结构体数组
(1)结构体数组的定义
1)具有相同结构体类型的结构体变量也可以组成数组,称它们为结构体数组。
结构体数组的每一个数组元素都是结构体类型的数据,它们都分别包括各个成员(分量)项。
2)定义结构体数组的方法和定义结构体变量的方法相仿,只需说明其为数组即可。
可以采用三种方法:
a. 先定义结构体类型,再用它定义结构体数组。结构体数组的定义形式如下:
struct 结构体名
{
成员表列;
};
struct 结构体名
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
};
struct student stu[3];
b. 在定义结构体类型同时定义结构体数组。结构体数组的定义形式如下:
struct 结构体名
{
成员表列;
}数组名[元素个数];
例如:
struct student
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
c. 直接定义结构体数组
结构体数组的定义形式如下:
struct //没有结构体名
{
成员表列;
}数组名[元素个数];
例如:
struct
{
char name[20];
char sex;
int age;
char addr[20];
}stu[3];
(2)结构体数组的初始化
结构体数组在定义的同时也可以进行初始化,并且与结构体变量的初始化规定相
同,
只能对全局的或静态存储类别的结构体数组初始化。
结构体数组初始化的一般形式是:
struct 结构体名
{
成员列表;
};
struct 结构体名 数组名[元素个数]={初始数据表};或者:
struct 结构体名
{
成员表列;
}数组名[元素个数]={初始数据表};
由于结构体变量是由若干不同类型的数据组成,而结构体数组又是由若干结构体变量组成。
所以要特别注意包围在大括号中的初始数据的顺序,以及它们与各个成员项间的对应关系。
(3)结构体数组的使用
一个结构体数组的元素相当于一个结构体变量,因此前面介绍的有关结构体变量的规则也适应于结构体数组元素。
以上面定义的结构体数组 stu[3]为例说明对结构体数组的引用:
1)引用某一元素中的成员。
若要引用数组第二个元素的 name 成员,则可写为:
stu[1].name
2)可以将一个结构体数组元素值赋给同一结构体类型的数组中的另一个元素,或赋给同一类型的变量。
如:
struct student stu[3],student1;
现在定义了一个结构体类型的数组,它有 3 个元素,又定义了一个结构体类型变量student1,则下面的赋值是合法的。
student1=stu[0];
stu[0]=stu[1];
stu[1]=student1;
3)不能把结构体数组元素作为一个整体直接进行输入输出。如:
printf(“…”,stu[0]);
或
scanf(“…”,&stu[0]);
都是错误的。
只能以单个成员为对象进行输入输出,如:
scanf(“…”,stu[0].name);
scanf(“…”,&stu[1].num);
printf(“…”,stu[0].name);
printf(“…”,stu[1].num);
(4)结构体指针
可以设定一个指针变量用来指向一个结构体变量。此时该指针变量的值是结构体变量的起始地址,该指针称为结构体指针。
结构体指针与前面介绍的各种指针变量在特性和方法上是相同的。与前述相同,在程序中结构体指针也是通过访问目标运算“*”访问它的对象。
结构体指针在程序中的一般定义形式为:
struct 结构体名 *结构指针名;
其中的结构体名必须是已经定义过的结构体类型。
例如,
对于上一节中定义的结构体类型 struct student,
可以说明使用这种结构体类型的结构指针如下:
struct student *pstu;
其中 pstu 是指向 struct student 结构体类型的指针。结构体指针的说明规定了它的数据特性,并为结构体指针本身分配了一定的内存空间。
但是指针的内容尚未确定,即它指向随机的对象。
当表示指针变量 p 所指向的结构体变量中的成员时,“(*结构体指针名).成员名”这种表示形式总是需要使用圆括号,显得很不简炼。
因此,对于结构体指针指向的结构体成员项,给出了另外一种简洁的表示方法,如下表
示:
结构体指针名->成员名
它与前一种表示方法在意义上是完全等价的。
例如,结构体指针 p 指向的结构体变量中的成员 name 可以表示如下:
(*p).name 或 p->name
C语言的结构变量定义规则,嵌入式学习笔记:c语言结构体的定义和使用相关推荐
- nltk和python的关系_NLTK学习笔记(一):语言处理和Python
目录 nltk资料下载 import nltk nltk.download() 其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) 来进行下载 ...
- x%3e=y%3e=z的c语言表达式,我的C语学习笔记-C语言教程(三).doc
我的C语学习笔记- C语言教程(三) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...
- c语言第七章函数笔记,我的C语学习笔记-C语言教程(七).doc
我的C语学习笔记- C语言教程(七) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...
- 《C++Primer》第二章-变量和基本类型-学习笔记(1)
<C++Primer>第二章-变量和基本类型-学习笔记(1) 文章目录 <C++Primer>第二章-变量和基本类型-学习笔记(1) 摘要 主体 基本(内置)类型 算数类型 整 ...
- 嵌入式学习笔记——使用寄存器编程操作GPIO
使用寄存器编程操作GPIO 前言 GPIO相关的寄存器 GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I) 位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) ...
- PyTorch学习笔记(五):模型定义、修改、保存
往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...
- 嵌入式学习笔记——STM32的USART通信概述
文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...
- 嵌入式学习笔记--misc
嵌入式学习笔记–misc 一.内核自带MISC驱动简介 misc 的意思是混合.杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动. ...
- 嵌入式学习笔记——基于Cortex-M的单片机介绍
基于Cortex-M的单片机介绍 前言 1生产厂商及其产品线 1.1ARM单片机的产品线 1.2命名规则 作业1 2习单片机的资料准备 2.1STM32开发所需手册 2.1.1芯片的数据手册 芯片基本 ...
- 嵌入式学习笔记——寄存器实现控制LED小灯
文章目录 前言 GPIO通用输出模式 初始化LED小灯的GPIO 原理图 初始化代码 初始化的效果 功能函数封装 直接分开宏定义两个 使用条件运算符 封装函数实现简单的功能 KEIL MDK一些技巧 ...
最新文章
- Web 开发最有用的 jQuery 插件集锦
- ATLAS入门篇之HoverMenuExtender控件编程(2)
- 360能删除mysql吗_如何彻底删除MYSQL
- js 字符和html和数值拼接,js中substring和substr的用法(获取字符串为整个html页面中的某个数值)...
- “睡服”面试官系列第十一篇之module加载实现(建议收藏学习)
- Java提高篇 —— Java三大特性之继承
- Python-又到了抢票的季节(带验证码识别验证)
- CoffeeScript简介 二
- mysql 处理文件函数_mysql数据处理与函数
- java springmvc 后台读取文件,springMVC
- Django3与Vue3前后端分离搭建
- 如何才能通过一线互联网公司面试?全网疯传
- 大数据可视化有哪些优势
- java多线程的常用方法(以及注意事项)
- 【优化算法】供需优化算法(SDO)【含Matlab源码 1804期】
- vld检测不输出_原创干货 | 基于机器学习的webshell检测踩坑小记
- 自顶向下语法分析的作业
- 2019当今互联网赚钱的六大方式,赠送给迷茫的网赚新手
- 阿里巴巴编码规范习题
- 视频图像的I帧、P帧、B帧详解