【发布时间】:2012-05-28 14:08:50
【问题描述】:
我有一个简单的程序将数组初始化为:
int a[]={10,20,30,40,50};
char *p;
p=(char*)a;
现在我想通过指针p 访问每个字节的值。为此我需要知道:数组是如何存储在内存中的?是存储在栈上还是堆上?
【问题讨论】:
-
也许我遗漏了一些东西,但是为什么你需要知道它是存储在堆栈中还是堆中呢?你试过 p[0] 吗?也许您可以通过说出您遇到的问题来提出问题,以便我们有一个起点......
-
正如@Ray 所说,这取决于您在做什么,这可能“无关紧要”......并且可能以各种方式依赖于编译器,由您可以执行的操作而不是实现定义细节。无论哪种方式,这些并不是唯一的两类存储......至少在 C++ 中(刚刚注意到这是一个 C 问题,我对 C 的形式化知之甚少......其他人可能有更合适的链接。 ) 不过,这可能很有用:gotw.ca/gotw/009.htm
-
“这种问题真的是 C 的全部内容”——不,不是。 “为什么你需要知道它是存储在堆栈中还是堆中?” ——没有说明这种需要。问题似乎与字节顺序有关。
-
@som,为什么要访问 int 数组的字节?您将获得的字节数是 sizeof(a)*sizeof(int),它们的顺序取决于机器架构。
标签: arrays c pointers heap-memory stack-memory