C语言结构体的声明和定义
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
一、结构体的声明和定义
在嵌入式系统中,对内存很敏感。所以在使用结构体时要注意“声明结构体类型”和“定义结构体变量”的区别。声明结构体类型只是指定了一个结构体的类型,它相当于一个模型,但其中并无具体数据,系统对之也不分配实际的内存单元。
声明一个结构体类型的一般形式为:
struct 结构体名
{成员列表};
要定义结构变量,则一般形式是:
struct 结构体名 结构体变量名;
在使用结构体时要注意结构体类型名和结构体变量名。构体类型名相当于“int a”里面的int,结构体变量名相当于a。
注意区分下面几个定义:
struct Student{ //声明结构体char name[20]; //姓名int num; //学号float score; //成绩
};
声明一个结构体类型Student,此时未分配内存单元。
struct Student stu1; //定义结构体变量
定义一个结构体变量stu1,此结构体变量的类型为Student,此时为变量stu1分配了内存单元。
truct Student{ char name[20]; int num; float score;
}stu1; //在定义之后跟变量名
在声明一个结构体类型Student的时候也定义一个结构体变量stu1,此时为变量stu1分配了内存单元。
struct { //没有结构名char name[20]; int num; float score;
}stu1;
使用匿名结构体来直接定义了一个结构体变量stu1,此时为变量stu1分配了内存单元。
在结构体的定义中经常使用typedef,typedef struct 是为了使用结构体更方便。
typedef struct
{int no;char name[12];
}Student;
此处定义了一个结构体类型,此时未分配内存单元。利用此结构体类型进行定义时不需要带struct,可直接定义。相当于先定义了一个匿名结构体,然后将该匿名结构体类型定义为别名Student。
利用该结构体类型定义结构体变量的方法如下:
Student stu1; //定义结构体变量
还有一种结构体定义方法如下:
typedef struct Student
{int no;char name[12];
}my_student;
此处定义了结构体类型,并不分配内存变量。相当于定义了结构体类型Student,然后Student类型又定义为Stu1。利用该结构体类型定义结构体变量的方法可以有两种分别如下:
struct Student stu1; //定义结构体变量
my_student stu2;//定义结构体变量
下面这种定义方法是错误的
typedef struct Student
{int no;char name[12];
};
二、结构体指针
当一个指针变量用来指向了一个结构变量,这个指针就成了结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。可以通过指针来访问结构变量。
定义结构指针变量的一般形式:
struct 结构名 * 结构指针变量名
struct Student *pstu; //定义了一个指针变量,它只能指向Student结构体类型的结构体变量
结构指针变量的定义也可以与结构体的定义同时。而且它必须先赋值后使用。数组名表示的是数组的首地址,可以直接赋值给数组指针。但结构变量名只是表示整个结构体变量,不表示结构体变量的首地址,所以不能直接赋值给结构指针变量,而应该使用 & 运算符把结构变量的的地址赋值给结构指针变量。
通过结构指针间接访问成员值,访问的一般形式:
(*结构指针变量). 成员名 或 结构指针变量 -> 成员名
(*pstu).name
pstu->name
C语言结构体的声明和定义相关推荐
- 【C 语言】结构体 ( 结构体类型定义 | 结构体类型别名 | 声明结构体变量的三种方法 | 栈内存中声明结构体变量 | 定义隐式结构体时声明变量 | 定义普通结构体时声明变量 )
文章目录 一.结构体类型定义 二.结构体类型别名 三.结构体类型变量声明 1.使用结构体类型 ( 别名 ) 声明变量 2. 定义隐式结构体时声明变量 3.定义普通结构体时声明变量 二.完整代码示例 一 ...
- 【Struct(结构体)杂谈之二】名不正则言不顺---Struct(结构体)的声明、定义及初始化
Struct(结构体)的声明.定义及初始化 上一篇里我们讲了为什么我们要引入Struct这个数据类型,我们了解到Struct是一种聚合数据类型,是为了用户描述和解释一些事物的方便而提出的,Struct ...
- 结构体struct声明、定义
结构体是一种构造类型(结构体.数组.联合类型),结构体弥补了数组不能存储多种类型的缺陷(即结构体是由于相同类型或不同类的成员组成) 一般声明形式如: struct 结构体名称 { 成员列表 }; st ...
- 11【C语言 趣味算法】个人所得税问题(结构体应用):结构体的声明、定义结构体类型的三种方法等
Contents 一.Review 二.New Problem:Personal income tax issues(个人所得税问题) 2.1 Description of the problem 2 ...
- C语言结构体的作用、定义、使用方法以及实例
目前已学的数据类型:数组(1.所有数据的类型必须一致 2.访问数组的成员必须通过下标) 学籍管理系统:学生(姓名.学号.性别.年龄.成绩...) 飞机票订票系统:机票(订票时间.班号.起点.终点. ...
- C语言结构体的四种定义方式
1.先定义结构体类型,再定义结构体变量 struct student{int age;char* name; };struct student stu;//stu为student的结构体变量 2.定义 ...
- linux中c语言结构体详解,Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- python展开 c函数中的宏预处理_Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
最新文章
- java 根据ip获取mac地址_利用java如何根据IP获取mac地址
- Google首页电吉
- yaml 文件格式简介
- 语音识别真的比肩人类了?听听阿里iDST初敏怎么说
- 利用素数表快速寻找 n 以内的所有素数
- Oracle 中使用 fetch bulk collect into 批量效率的读取
- Eclipse android
- php event loop,理解javascript中的事件循环(Event Loop)
- error: field 'b' has imcomplete type
- java中 8进制 10进制 2进制 16进制 相互转换
- IAR 下C中嵌入汇编
- [转]面试官,不要再问我三次握手和四次挥手
- ps制作20种特效文字_用PS制作裂、火、电特效——电
- 数据库为date型,而前端要显示String型,问题解决
- ES6学习(模板字符串)
- 《C和C++程序员面试秘笈》——1.4 i++与++i哪个效率更高
- 网站 smtp服务器,网站smtp服务器
- python评分卡模型
- bugku之密码ok解题思路
- Qt 中信号和槽机制