内存对齐(字节对齐,结构体对齐)
源码:
#include <stdio.h>struct stcTest1{ int a; char b; int c;};struct stcTest2{ char a; int b; char c;};struct stcTest3{ int a; char b[9]; int c;};int main(){ stcTest1 t1; stcTest2 t2; stcTest3 t3; int a; int c; char b; char b2[9]; printf("-----------stcTest1-------------\n"); printf("stcTest1: %d\n",sizeof(stcTest1)); printf("stcTest1: %d\n",&t1); printf("stcTest1 next: %d\n",(&t1)+1); printf("stcTest1.a: %d\n",&t1.a); printf("stcTest1.b: %d\n",&t1.b); printf("stcTest1.c: %d\n",&t1.c); printf("-----------stcTest2-------------\n"); printf("stcTest2: %d\n",sizeof(stcTest2)); printf("stcTest2: %d\n",&t2); printf("stcTest2 next: %d\n",&t2+1); printf("stcTest2.a: %d\n",&t2.a); printf("stcTest2.b: %d\n",&t2.b); printf("stcTest2.c: %d\n",&t2.c); printf("-----------stcTest3-------------\n"); printf("stcTest3: %d\n",sizeof(stcTest3)); printf("stcTest3: %d\n",&t3); printf("stcTest3 next: %d\n",&t3+1); printf("stcTest3.a: %d\n",&t3.a); printf("stcTest3.b: %d\n",&t3.b); printf("stcTest3.c: %d\n",&t3.c); printf("------------------------\n"); printf("a: %d\n",&a); printf("c: %d\n",&c); printf("b: %d\n",&b); printf("b2: %d\n",b2); printf("b2len: %d\n",sizeof(b2)); getchar(); return 0;}
结果:

分析:20=4+4*3+4;4*3>9
想知道下一个地址:&t1+1,sizeof(t1)=((&t1+1)-(&t1))/4 &t1:表示地址编号
- 1楼skyandcode昨天 19:09
- 学习了,第二个结构体是12,还以为是8.n结构体内的变量存入内存时是以定义的顺序的,考虑到内存对齐,所以输出的是12.