【发布时间】:2015-09-01 10:29:07
【问题描述】:
例如:
#include <iostream>
using namespace std;
int main(){
int *a;
a = new int[2];
a[1] = 1;
}
据我了解,在“堆内存”中分配了一个大小为 2 的 int 数组,而指针 a 获取该新创建数组的内存地址。但是,当尝试访问(例如)数组的第二个索引(a[1])时,它只是在没有星号运算符的情况下这样做,我不明白为什么,我习惯于看到存储在一个指针指向的内存地址以*pointername 访问,而不是pointername[value]。
所以我的问题是,为什么我们使用下标运算符来访问一个指向数组的指针,而没有星号运算符?
【问题讨论】:
-
这在实践中意味着同样的事情,但是在 C++ 中,一个类可以重载 [] 运算符,所以最好使用它(显然 int * 没有)。
-
访问a[1]不是访问第一个,而是第二个元素,c数组索引是从零开始的。
-
避免这样的编码。使用 C++11 standard containers,例如
std::array或std::vector -
指针
a指向数组的第一个元素 - 它是指向int的指针。指向int数组的指针如下所示:int (*ap)[2];。如果你有一个指向数组的指针,你确实必须写(*ap)[1] = 1;。
标签: c++ arrays pointers memory dynamic