莱芜百度网站优化,有哪些做软件的网站有哪些,哪些网站需要做分享按钮,滁州网站seo目录
结构体
例子
大小
联合体
例子
大小
枚举
例子
大小 结构体
结构体就是我们自己发明的数据类型#xff0c;因此使用结构体至少包含两个步骤#xff1a; 第一#xff0c;创建一个自定义的结构体类型。 第二#xff0c;用这个自己搞出来的类型定义结构体变量 …目录
结构体
例子
大小
联合体
例子
大小
枚举
例子
大小 结构体
结构体就是我们自己发明的数据类型因此使用结构体至少包含两个步骤 第一创建一个自定义的结构体类型。 第二用这个自己搞出来的类型定义结构体变量
// 1创建一个结构体模板 student包含姓名、年龄和分数
struct student
{
char name[32];
int age;
float score;
};
// 2使用 student 模板定义两个结构体变量
struct student Jack, Rose;
例子
1 #include stdio.h
2 #include string.h
3
4 struct student // 结构体模板
5 {
6 char name[32];
7 int age;
8 float score;
9 };
10
11 void show(struct student someone);
12
13 int main(void)
14 {
15 // 定义一个 student 类型结构体变量 Jack并将成员赋值
16 struct student Jack;
17 strcpy(Jack.name, Jack); // 圆点.被称为成员引用符
18 Jack.age 18;
19 Jack.score 90.5;
20
21 // 定义一个 student 类型结构体变量 Rose并进行初始化
22 struct student Rose {Rose, 16, 80.0};
23
24 // 对结构体变量 Michael 进行指定成员初始化
25 struct student Michael {
26 .score 88.5,
27 .name Michael
28 };
29
30 // 定义结构体 Michael_Junior 并直接将 Michael 整个赋值给他
31 struct student Michael_Junior;
32 Michael_Junior Michael;
33
34 // 定义一个具有 50 个 student 类型结构体变量的数组
35 struct student myclass[50];
36 myclass[0] Jack;
37 myclass[1] Rose;
38 myclass[2] Michael;
39
40 // 定义一个结构体指针 p并使其指向结构体 Michael
41 struct student *p;
42 p Michael;
43
44 // 对结构体指针使用跟普通指针一样但也可以使用更加方便的箭头
45 (*p).age 23;
46 p - age 23;
47
48 show(Michael); // 将结构体的地址作为参数传递给函数 show( )
49 return 0;
50 }
51
52 void show(struct student *ptr_someone)
53 {
54 printf(name: %s, age: %d, score: %f\n,
55 ptr_someone - name, // 将结构体的成员打印出来
56 ptr_someone - age,
57 ptr_someone - score);
58 }
大小
结构体大小要遵循地址对齐 每一款不同的处理器存取内存数据都会有不同的策略如果是 32 位的 CPU一般 来讲他在存取内存数据的时候每次至少存取 4 个字节即 32 位也就是按 4 字节对齐 来存取的。换个角度讲CPU 有这个能力他能一次存取 4 个字节。 接下来我们可以想到为了更高效地读取数据编译器会尽可能地将变量塞进一个 4 字节单元里面因为这样最省时间。如果变量比较大4 个字节放不下则编译器会尽可能 地将变量塞进两个 4 字节单元里面反正一句话两个坑能装得下的就绝不用三个坑。这 就是为什么变量的地址要对齐的最根本原因。 可见如果对一个 double 型数据的地址不作要求那么 CPU 就有可能为此付出代价 需要三个指令周期才能将区区 8 个字节搬到家里来这显然很不环保环保的做法是令 其地址至少是 4 的整数倍即 4字节对齐 可以总结出一套这样的规律假设是 32 位系统
1如果变量的尺寸小于 4 字节那么该变量的 m 值等于变量的长度。2如果变量的尺寸大于等于 4 字节则一律按 4 字节对齐。3如果变量的 m 值被人为调整过则以调整后的 m 值为
一个变量的 m 值规定了这个变量的地址的最小倍数同时也规定了这个变 量的大小至少是这个 m 值的倍数。m 值不是这个变量的大小。结构体本身也是一个变量 结构体变量的 m 值取决于其成员中 m 值最大的那个
struct node { short a; double b; char c; }x;
short为2double为4char为1取最大的4为m所以该x的大小为12 联合体
例子
union example
{
int a;
char b;
double c;
}x;
大小
共用体变量 x 的大小等于各成员中的最大值也就是 c 的大小8 个字节 枚举
enum spectrum {red, green, blue};
相当于
enum spectrum {red0, green1, blue2};例子
1 #include stdio.h
2
3 // 定义了一个枚举常量列表
4 enum spectrum {red, green, blue};
5
6 int main(void)
7 {
8 enum spectrum color; // 定义了一个枚举变量
9 color green;
10
11 switch(color)
12 {
13 case red: // 使用枚举常量来判断 color 的值
14 printf(red\n);
15 break;
16 case green:
17 printf(green\n);
18 break;
19 case blue:
20 printf(blue\n);
21 break;
22 default:
23 printf(unknown color\n);
24 }
25
26 return 0;
27 }
大小
一般为int型就为4个字节