C语言32个关键字
有32个关键字详细说明,还有跳转链接!
一、struct—简介
struct就是结构体,用来描述需要相同类型或不同类型数据的数据对象。
通俗的说法就是打包封装,将一些分散的数据整合在一起。
结构体的优点: 结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内聚,低耦合”的,更利于程序的阅读理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。
二、struct—定义
1. 声明结构体类型
一般形式具体如下:
1
2
3
4
5
6
7
8struct 结构名 { //成员列表 类型 变量名; 类型 变量名; .... };
举例说明如下:
1
2
3
4
5
6
7
8//声明结构体类型 struct info { char name[20]; int age; float height; };
2. 定义结构体变量
一般形式具体如下:
1
2
3
4
5
6
7
8
9
10//声明结构体类型 struct info { char name[20]; int age; float height; }; //定义结构体变量 struct info person;
合并简化形式具体如下:
1
2
3
4
5
6
7struct info { char name[20]; int age; float height; }person;
匿名结构体形式具体如下:
1
2
3
4
5
6
7struct { char name[20]; int age; float height; }person;
3. 使用typedef声明结构体类型,再定义结构体变量
一般形式具体如下:
1
2
3
4
5
6
7
8
9
10typedef struct info { char name[20]; int age; float height; } NOM; //定义结构体变量,以下两种效果一样 struct info person; NOM person;
匿名结构体形式具体如下:
1
2
3
4
5
6
7
8
9typedef struct { char name[20]; int age; float height; } NOM; //定义结构体变量 NOM person;
三、struct—使用方法
1. 结构体变量成员—赋值(.)
一般形式—赋值
初始化定义时—赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18//声明结构体类型 typedef struct { char name[20]; int age; float height; } NOM; //定义结构体变量---初始化赋值1 NOM person={"MQ",25,183.5}; //定义结构体变量---初始化赋值2 NOM person= { .name = "MQ", .age = 25, .height = 183.5 };
初始化后—赋值
1
2
3
4strcpy(person.name,"MQ"); person.age = 25; person.height = 183.5;
结构体参数—赋值
1
2
3
4
5
6
7void struct_exd (NOM person) { strcpy(person.name,"MQ"); person.age=25; person.height = 183.5; }
结构体返回值—赋值
1
2
3
4
5
6
7
8
9
10NOM struct_exd (void) { NOM person; strcpy(person.name,"MQ"); person.age=25; person.height = 183.5; return person; }
结构体数组—赋值
初始化定义时—赋值
1
2
3
4
5
6NOM person[2]= { {"MQ",25,183.5}, {"VV",22,158.5} };
初始化后—赋值
1
2
3
4
5
6
7strcpy(person[0].name,"MQ"); person[0].age = 25; person[0].height = 183.5; strcpy(person[1].name,"VV"); person[1].age = 22; person[1].height = 158.5;
2. 结构体指针变量成员—赋值(->)
一般形式—赋值
结构体指针变量就是指向结构体首地址的指针,并没有给变量分配内存。
所以在给结构体指针变量成员赋值前,要先分配内存。
1
2
3
4
5
6NOM *per; per = (NOM*)malloc(sizeof(NOM));//分配内存 strcpy(per->name,"MQ"); per->age = 25; per->height = 183.5;
结构体指针参数—赋值
1
2
3
4
5
6
7void struct_ex (NOM * person) { strcpy(person->name,"MQ"); person->age=25; person->height = 183.5; }
3. 位结构体
位结构体是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构体比按位运算符更加方便。
具体详细说明,请点击下面蓝色字体链接!
C语言:位结构体
四、struct—占用内存空间
声明结构体类型的时候没有申请内存空间,定义结构体变量的时候,就分配内存空间。
由于分配内存时有默认的对齐方式,所以结构体的内存大小并不都是结构体所含变量内存的总和。
一般情况,具体信息如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <stdio.h> typedef struct { char name[20]; int age; float height; } NOM; int main(int argc, char *argv[]) { printf("size=%dn",sizeof(NOM)); return 0; }
运行结果如下:
1
2size=28
20(name[20])+4(age)+4(height)=28
特殊情况,具体信息如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29#include <stdio.h> struct MQ { char a; int b; char c; short d; short e; char f; short g; int h; char k; } data={'a',0x55555555,'b',0x1111,0x2222,'c',0x3333,0x44444444,'d'}; //这样定义有利于判断填充字节 int main(void) { int i=0,adder=0; printf("struct=%dn",sizeof(data)); adder=&data; for(i=0;i<sizeof(data);i++) printf("%x ",*(unsigned __int8*)(adder+i)); printf("n"); return 0; }
运行结果如下:
1
2
3struct=28 61 0 0 0 55 55 55 55 62 0 11 11 22 22 63 0 33 33 0 0 44 44 44 44 64 0 0 0
计算结构体内存大小
变量偏移量必须是变量所占内存的整数倍,否则填充0对齐。
结构体的总内存必须是最长变量内存的整数倍,否则填充0对齐。
变量 | 偏移量 | 内存 | 数据(hex) |
---|---|---|---|
char a | 0 | 4 | 61 0 0 0 |
int b | 4 | 4 | 55 55 55 55 |
char c | 8 | 2 | 62 0 |
short d | 10 | 2 | 11 11 |
short e | 12 | 2 | 22 22 |
char f | 14 | 2 | 63 0 |
short g | 16 | 4 | 33 33 0 0 |
int h | 20 | 4 | 44 44 44 44 |
char k | 24 | 4 | 64 0 0 0 |
内存总和28=最后变量的偏移量24+最后变量占的内存4
C语言:位结构体
C语言:strcpy()—字符串复制
最后
以上就是柔弱小伙最近收集整理的关于C语言:关键字---struct(声明结构体类型)一、struct—简介二、struct—定义三、struct—使用方法四、struct—占用内存空间的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。
发表评论 取消回复