如何解决C 中的数组是否需要单独的内存来存储第一个元素的地址?
在许多 C 编程教程视频和解释中,用于表示数组,如
int a[5] = {9,2,1,3,4};
导师/老师总是制作一个单独的盒子来存储数组的第一个元素的地址,即在这种情况下为 9 的地址。
也就是说数组消耗的总内存应该是(常量指针a用来存储第一个元素的地址所消耗的内存+5*(sizeof(int))
.
如果是这样,那么为什么下面提到的这个程序会给出这样的输出。
程序
#include <stdio.h>
int main()
{
int a[5] = {6,9,3};
int * p = a;
printf("a is %u\n",a);
printf("&a is %u\n",&a);
printf("&a+1 is %u\n",&a+1);
printf("p is %u\n",p);
printf("&p is %u",&p);
return 0;
}
输出
a is 2128206832
&a is 2128206832
&a+1 is 2128206852
p is 2128206832
&p is 2128206824
此处 a
和 &a
给出相同的地址。
在查看人们主要用来表示 C 中的数组的表示时,根本不应该是这种情况。
根据他们对数组的图表示,它应该为 a
和 &a
赋予不同的值,就像 p
和 &p
一样。
那么数组是如何在内存中真正表现出来的呢?
抱歉这么琐碎的疑问,但我很困惑。
解决方法
不,a 不会创建单独的内存来存储数组的地址。 &a
给出了数组的地址,a 给出了 a[0]
的地址。 &a 和 a 都是相同的 a,因为第一个元素的地址与数组的地址相同。 int a[5]
完全符合它的外观,生成 5 个元素的数组。创建 p 时,您创建了一个单独的变量,其值为 &a[0]
。为了更清楚,您可以查看此内容。您还应该查看 this
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。