概述
C语言32个关键字
有32个关键字详细说明,还有跳转链接!
一、struct—简介
struct就是结构体,用来描述需要相同类型或不同类型数据的数据对象。
通俗的说法就是打包封装,将一些分散的数据整合在一起。
结构体的优点: 结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内聚,低耦合”的,更利于程序的阅读理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。
二、struct—定义
1. 声明结构体类型
一般形式具体如下:
struct 结构名
{
//成员列表
类型 变量名;
类型 变量名;
....
};
举例说明如下:
//声明结构体类型
struct info
{
char name[20];
int age;
float height;
};
2. 定义结构体变量
一般形式具体如下:
//声明结构体类型
struct info
{
char name[20];
int age;
float height;
};
//定义结构体变量
struct info person;
合并简化形式具体如下:
struct info
{
char name[20];
int age;
float height;
}person;
匿名结构体形式具体如下:
struct
{
char name[20];
int age;
float height;
}person;
3. 使用typedef声明结构体类型,再定义结构体变量
一般形式具体如下:
typedef struct info
{
char name[20];
int age;
float height;
} NOM;
//定义结构体变量,以下两种效果一样
struct info person;
NOM person;
匿名结构体形式具体如下:
typedef struct
{
char name[20];
int age;
float height;
} NOM;
//定义结构体变量
NOM person;
三、struct—使用方法
1. 结构体变量成员—赋值(.)
一般形式—赋值
初始化定义时—赋值
//声明结构体类型
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
};
初始化后—赋值
strcpy(person.name,"MQ");
person.age = 25;
person.height = 183.5;
结构体参数—赋值
void struct_exd (NOM person)
{
strcpy(person.name,"MQ");
person.age=25;
person.height = 183.5;
}
结构体返回值—赋值
NOM struct_exd (void)
{
NOM person;
strcpy(person.name,"MQ");
person.age=25;
person.height = 183.5;
return person;
}
结构体数组—赋值
初始化定义时—赋值
NOM person[2]=
{
{"MQ",25,183.5},
{"VV",22,158.5}
};
初始化后—赋值
strcpy(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. 结构体指针变量成员—赋值(->)
一般形式—赋值
结构体指针变量就是指向结构体首地址的指针,并没有给变量分配内存。
所以在给结构体指针变量成员赋值前,要先分配内存。
NOM *per;
per = (NOM*)malloc(sizeof(NOM));//分配内存
strcpy(per->name,"MQ");
per->age = 25;
per->height = 183.5;
结构体指针参数—赋值
void struct_ex (NOM * person)
{
strcpy(person->name,"MQ");
person->age=25;
person->height = 183.5;
}
3. 位结构体
位结构体是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构体比按位运算符更加方便。
具体详细说明,请点击下面蓝色字体链接!
C语言:位结构体
四、struct—占用内存空间
声明结构体类型的时候没有申请内存空间,定义结构体变量的时候,就分配内存空间。
由于分配内存时有默认的对齐方式,所以结构体的内存大小并不都是结构体所含变量内存的总和。
一般情况,具体信息如下:
#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;
}
运行结果如下:
size=28
20(name[20])+4(age)+4(height)=28
特殊情况,具体信息如下:
#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;
}
运行结果如下:
struct=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语言:关键字---struct(声明结构体类型)一、struct—简介二、struct—定义三、struct—使用方法四、struct—占用内存空间所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复