page contents

使用union了解数组的存储顺序

使用共用体(union)来了解数组中的存储顺序

我们都知道数组的内存分配是连续的。

也就是说,数组中的每个元素在内存上是挨着的。

另外我们也知道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]);

}

结论:数组在录入数据的时候是倒序,所以他的读取方式也会是倒序。

  • 发表于 2021-05-18 16:22
  • 阅读 ( 1087 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
文双
文双

NB

71 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章