我们都知道数组的内存分配是连续的。
也就是说,数组中的每个元素在内存上是挨着的。
另外我们也知道union,共用体的所以成员是共用一块内存的。
那么问题来了,我的union里面只有一个int类型data和一个char类型的arr[4]。
那他们刚好共享同样大小的内存。
这样的话我就可以知道int类型data在arr中是个什么情况了。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
/* 数组的存储顺序 */
main(){
union un{
int data;
char arr[4];
}a;
a.data = 1;
printf("第一次输出,data的值为%d\n", a.data);
printf("arr[0]:%d\n", a.arr[0]);
printf("arr[1]:%d\n", a.arr[1]);
printf("arr[2]:%d\n", a.arr[2]);
printf("arr[3]:%d\n", a.arr[3]);
a.data = 256;
printf("第二次输出,data的值为%d\n", a.data);
printf("arr[0]:%d\n", a.arr[0]);
printf("arr[1]:%d\n", a.arr[1]);
printf("arr[2]:%d\n", a.arr[2]);
printf("arr[3]:%d\n", a.arr[3]);
a.data = 65536;
printf("第三次输出,data的值为%d\n", a.data);
printf("arr[0]:%d\n", a.arr[0]);
printf("arr[1]:%d\n", a.arr[1]);
printf("arr[2]:%d\n", a.arr[2]);
printf("arr[3]:%d\n", a.arr[3]);
a.data = 16777216;
printf("第四次输出,data的值为%d\n", a.data);
printf("arr[0]:%d\n", a.arr[0]);
printf("arr[1]:%d\n", a.arr[1]);
printf("arr[2]:%d\n", a.arr[2]);
printf("arr[3]:%d\n", a.arr[3]);
}
结论:数组在录入数据的时候是倒序,所以他的读取方式也会是倒序。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!