【发布时间】:2014-07-13 20:06:06
【问题描述】:
考虑以下代码:
#include <iostream>
int main()
{
int index;
std::cin >> index;
int* dynArray = new int[5];
dynArray[index] = 1;
int stackArray[5];
stackArray[index] = 1;
}
我确定dynArray 是一个简单的int* 指针,它在堆栈上占用额外的sizeof(int*) 字节。
问题 1:是否还在堆栈上为 stackArray 创建了一个额外的指针变量?如果是这样,那总是发生吗?如果不是,那么stackArray[index] = 1; 在不知道数组基数的情况下如何工作,即编译器如何决定将什么值添加到index 以计算地址?
问题2:C/C++有什么区别吗?
我想要这两种环境的答案:
- GCC/Linux,x86
- Visual Studio 2013,x86
【问题讨论】:
-
@ArunMu 这与问题关系不大。
-
首先,
int* dynArray = new int[5]与int stackArray[5]的类型不同。 -
@40two 正确,这就是我问这个问题的原因。
-
使用 gcc 您可以使用 -S 标志编译代码以生成汇编代码并自行验证两个数组的分配方式。不过,我希望 dynArray 在堆中。不知道VS2013有没有类似的选项