C语言小记:结构体及其在内存中的储存形式
1.结构体
-
结构体的作用:自定义一个包含多种不同数据类型的变量。
-
语法:
struct 结构体名称 { 结构体成员1; 结构体成员2; 结构体成员3; ... } -
定义结构体变量:
include<stdio.h> struct RCC//声明一个结构体类型RCC,其中有两个char类型变量,一个int类型变量。 { char cr; char cfgr; int cf; }; int main(void) { struct RCC rcc;//定义一个结构体变量rcc. return 0; }
2.结构体变量的在内存中的存储形式:
首先我们来运行一段代码
#include<stdio.h>
int main(void)
{
struct RCC
{
char cr;
char cfgr;
int cf;
};
struct RCC rcc = {
'q',
'w',
48
};
printf(" cr的地址:%p\n",&rcc.cr);
printf("cfgr的地址:%p\n",&rcc.cfgr);
printf(" cf的地址:%p\n",&rcc.cf);
return 0;
}
运行结果:
观察运行发现rcc.cr的地址再000000000062FE10,rcc.cfgr的地址在000000000062FE11,rcc.cf的地址在000000000062FE14。这是由于C语言在储存结构体中不同类型的数据结构时,会以4个字节为一个单元进行存储,当四个字节容纳不下下一个类型的数据时,C语言编译器会将这个单元中没有存放数据的剩余内存空下,转而存放在下一个单元中。如图2所示。
图2
所以,为了节省内存空间,在声明结构体时,尽量合理摆放结构体中各个变量标识符的先后顺序,合理利用内存空间。
3.结构体的地址
结构体变量的地址=结构体第一个成员的地址,如图3

代码:
#include<stdio.h>
int main(void)
{
struct RCC
{
char cr;
char cfgr;
int cf;
}rcc = {
'q',
'w',
48
};
printf(" rcc的地址:%p\n",&rcc);
printf("rcc.cr的地址:%p\n",&rcc.cr);
return 0;
}
作者声明:文章原创不易,转载引用请声明出处。
本文介绍了C语言中结构体的使用,详细讨论了结构体变量在内存中的存储形式,指出C语言按照4字节对齐的原则存储结构体,建议在声明结构体时合理安排成员顺序以节省内存。同时阐述了结构体变量的地址等于其首个成员的地址。
1403

被折叠的 条评论
为什么被折叠?



