typedef struct {
int a;
int b;
int c;
int d;
int f;
} Node;
typedef union {
int all; // all变量与结构体中的a变量 共享一个内存;(即内存为最大内存的意思)
Node node;
} Cs;
int main(void)
{
Cs aa;
aa.node.a = 1;
aa.node.b = 2;
aa.node.c = 3;
aa.node.d = 4;
aa.node.f = 5;
printf("%p\n", &aa.node.a);
printf("%p\n", &aa.node.b);
printf("%p\n", &aa.node.c);
printf("%p\n", &aa.node.d);
printf("%p\n", &aa.node.f);
printf("%p\n", &aa.all);
printf("%d\n", aa.node.a);
printf("%d\n", aa.node.b);
printf("%d\n", aa.node.c);
printf("%d\n", aa.node.d);
printf("%d\n", aa.node.f);
printf("%d\n", aa.all);
return 0;
}
000000000065FE00
000000000065FE04
000000000065FE08
000000000065FE0C
000000000065FE10
000000000065FE00
1
2
3
4
5
1
案例二:
typedef union {
float rgb_data; // float型数据共32位,4个字节
unsigned long color; // long型数据共32位,4个字节
unsigned char color_data[4]; // 数组每一项是1个字节,共4个字节
} Aa;
int main(void)
{
Aa aa;
aa.color = 0x12345678; // 四个字节赋值满
printf("%d\n", sizeof(aa.color)); // 4个字节
printf("%d\n", sizeof(aa.color_data[0])); // 1个字节
printf("%p\n", &aa.rgb_data); // 三个变量地址相同
printf("%p\n", &aa.color);
printf("%p\n", &aa.color_data[0]);
printf("%p\n", &aa.color_data[1]);
printf("%p\n", &aa.color_data[2]);
printf("%p\n", &aa.color_data[3]);
printf("%x\n", aa.color);
printf("%x\n", aa.color_data[0]);
printf("%x\n", aa.color_data[1]);
printf("%x\n", aa.color_data[2]);
printf("%x\n", aa.color_data[3]);
return 0;
}
4
1
000000000065FE1C
000000000065FE1C
000000000065FE1C
000000000065FE1D
000000000065FE1E
000000000065FE1F
12345678
78
56
34
12
typedef struct {
int idx; // 4
int a; // 4
char arr[10]; // 10 // 创建node的时候,是2个字节2个字节读取的,在实际创建的时候1个char所占内存为2个字节
long long b; // 8
float c; // 4
int brr[10]; // 40
} Node;
int main()
{
Node structNode[10];
Node node;
// printf("%d\n", sizeof(node)); // 80
// printf("%d\n", sizeof(structNode[0])); // 80 structNode指针指向第一个元素、再解引用,得到第一个struct结构体
printf("%p\n", structNode);
printf("%p\n", &structNode[0]);
printf("%p\n", &structNode[0].idx); // 与 &structNode[0] 为同一个地址,只是步长不一样;
printf("%p\n", &structNode[0].a);
printf("---------\n");
int dp[10][10];
printf("%p\n", dp);
printf("%p\n", &dp[0]);
printf("%p\n", dp[0]);
printf("%p\n", &dp[0][0]);
return 0;
}
000000000065FB00
000000000065FB00
000000000065FB00
000000000065FB04
---------
000000000065F970
000000000065F970
000000000065F970
000000000065F970