C语言小记:结构体及其在内存中的储存形式
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; }
作者声明:文章原创不易,转载引用请声明出处。