ToB企服应用市场:ToB评测及商务社交产业平台
标题:
C语言---结构体
[打印本页]
作者:
张国伟
时间:
2024-8-10 15:36
标题:
C语言---结构体
目录
1. 结构体
1.1 结构体初始化
1.2 结构体变量的引用
1.3 结构体范例的巨细
2. qsort()
3. 共用体
4. 枚举
5. typedef
1. 结构体
语法:
struct 结构体名
{
成员列表;
} ;
复制代码
(1)struct 关键字 --- 表现是在构造一个结构体的范例
(2)结构体名 --- 用来描述结构体这个范例的一个名称
(3)成员列表 --- 表现要描述的复杂数据中用到的具体的成员变量,多个成员变量之间用分号隔开
(4)末了有一个分号 表现结束
eg:
struct student
{
char name[30];
int sno;
float score;
char sex;
}; //表示 定义出 一个 数据类型
复制代码
留意:
1.结构体范例的利用的过程
a.先定义出范例
b.定义变量
2.定义变量
struct 结构体名 变量名;
1.1 结构体初始化
struct student s = { };
(1)看每个成员变量,具体是什么数据范例。
(2)根据 各个成员变量 自身的数据范例,进行初始化。
(3)初始化的次序,按照定义的次序,依次初始化
eg:
struct student s = {"tom",1515,89.6,"man"};
复制代码
1.2 结构体变量的引用
结构体数据 引用时,一样平常是引用到具体的成员数据 ,引用到成员
运算符 为:. //结构体成员运算符
利用:
结构体变量名.成员名 //表现 访问 某个结构体 的成员
s.name
复制代码
结构体范例的定义情势:
情势1: 先定义范例,然后定义变量
struct demo
{
};
struct demo d;
情势2: 定义范例的同时,定义变量
struct demo
{
}d;
情势3: 定义范例的同时,定义变量,可以省略 结构体名
struct
{
}d; //假如,结构体范例只用一次
1.3 结构体范例的巨细
(1)在32位的平台上,默认都是按4字节对齐的。
(2)对于成员变量,
各自在自己的自然边界上对齐。
char -- 1字节
short -- 2字节
int -- 4字节
(3)假如 成员变量中有比4字节大。
此时 整个结构体 按照4字节对齐。 //32位的平台
(4)假如 成员变量中没有有比4字节大。
此时 整个结构体 按照最大的谁人成员对齐。 //32位的平台
假如有超过4字节 ,按照4字节对齐
假如没有超过4字节的,则按成员变量中最大对齐
(5)64位的平台:假如超过4字节的,按超过的最大的成员变量对齐 ,假如没有超过4字节的,则按成员变量中最大对齐
同范例的结构体变量之间,可以相互赋值:
struct student s1;
struct student s2;
s2 = s1;
2. qsort()
void qsort(void *base, //要排序的数组的首地址
size_t nmemb, //数组元素的个数
size_t size, //单个元素的巨细
int (*compar)(const void *, const void *) //比较函数 --- 提供比较依据
#include<stdio.h>
#include<stdlib.h>
int compare (const void *a,const void *b) // 回调函数
{
const int *p = a;
const int *q = b;
return *p - *q;
}
int main(void)
{
int a[] = {2,3,1,7,9,0,5,4,6,8};
qsort(a,10,sizeof(int),compare);
int i = 0;
for(i = 0;i < 10;++i)
{
printf("%d ",a[i]);
}
putchar('\n');
}
复制代码
3. 共用体
union 语法:
union 共用体名
{
成员变量;
};
union demo
{
char a;
short b;
int c;
};
union demo d = {1}; // 初始化
复制代码
共用了一块内存空间 共用了最大成员的空间
(内存空间就是最大成员谁人空间内存巨细)
留意:
(1)共用体初始化时,只能给一个值,默认时给到第一个成员的。
(2)共用体变量中的值,取决与末了一次给到的值,还要看能影响几个字节。
考点:用共用体判断巨细端
#include<stdio.h>
union demo
{
unsigned char a;
unsigned short b;
unsigned int c;
};
int isLittleEnidian(void)
{
union
{
int a;
char b;
}d = {1};
return d.b; // 如果返回1,就是小端模式
}
int main(void)
{
union demo d;
printf("%d\n",isLittleEnidian());
return 0;
}
复制代码
4. 枚举
枚举:是指将变量的值一个一个枚举出来,变量的值只限于枚举出的值的范围
作用:
(1)为了提高代码可读性
(2)提高代码的安全性
enum 枚举名
{
列举各种值, // 值之间用 , 逗号隔开
}; // 表示定义了一种枚举类型
enum 枚举名 变量名;
复制代码
注:枚举中逐个枚举的值默认是从0开始,枚举范例的本质实际上是一个int范例的数据,
枚举范例的变量与整型范例的变量是通用的。
假如有给定的值,后续没有给值的枚举成员,依次+1.
eg:
enum fire
{
Fire little, // 0
Fire middle,
Fire lage
};
enum fire
{
Fire little = 1, // 1
Fire middle, // 2
Fire lage // 3
};
复制代码
与宏定义对比:利用阶段不一样 --- 宏定义 ---- 预处理阶段; 枚举 --- 编译阶段 要检查语法,运行阶段要到场代码运行;枚举更能阐明有相关性的一些值之间关系。
5. typedef
不是定义范例,而是给范例起别名,
int a;
typedef int a; // 此时a是一个int类型的一个别名
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4