数组如何存储在内存中?

som*_*som 8 c

我有一个简单的程序,它将数组初始化为:

int a[]={10,20,30,40,50};

char *p;

p=(char*)a;
Run Code Online (Sandbox Code Playgroud)

现在我想通过指针访问每个字节的值p.为此,我需要知道数组如何存储在内存(堆栈或堆)中?

Alo*_*ave 22

数组将其元素存储在连续的内存位置.
如果您在本地创建了数组,它将处于堆栈状态.存储元素的位置取决于存储规范.
对于Eg:
全局或静态声明的数组与本地声明的数组具有不同的存储规范.从技术上讲,where部分是实现定义的,但通常实现将使用类似的使用模式.

  • 一个本地阵列将(通常)上创建的堆栈
  • 全局或静态阵列将(通常)上创建的BSS /数据段
  • 动态创建的阵列将上创建.


Nic*_*ckO 7

由于我还不能添加评论,这是我的答案中的两分钱:

如果您只想知道内存是在堆栈还是堆上,请阅读其他答案,它们比我更了解情况.

如果您想确切知道值的位置,可以随时打印地址:

printf("address at a[0] = %p\n", (void *)&a[0]);
printf("address at p[0] = %p\n", (void *)&p[0]);
Run Code Online (Sandbox Code Playgroud)

你会注意到同样的答案.但是,那么看看

printf("address at a[1] = %p\n", (void *)&a[1]);
printf("address at p[1] = %p\n", (void *)&p[1]);
Run Code Online (Sandbox Code Playgroud)

这是一个有趣的小练习.只是为了好玩,运行以下代码,看看你得到了什么:

 p[2] = 'a';
 printf("a[0] is %d\n", a[0]);
 printf("a[1] is %d\n", a[1]);
 printf("p[2] is %d\n", p[2]);
 putchar(p[2]);
Run Code Online (Sandbox Code Playgroud)