我们可以以某种方式使用 array[i] 而不是 *(array+i) 吗?

0 c++ arrays parsing stl compilation

在 C++ 中,当我必须在某个函数中使用数组时,我将数组作为参数传递并获取指向数组第一个元素的指针。虽然可以使用,并且使用指针并不麻烦,但我想知道是否存在一些内置头文件或任何其他指令集,当我想访问第i-th 个元素时我可以简单地编写的数组array[i],它被编译器读取为*(array+i)?

如果存在那就太好了,因为它会使其非常统一且易于编码,因为在我使用向量的所有时间我都可以访问vector[i]数组中的第 i 个元素,而我必须以另一种方式使用它*(array+i)

另外,为什么 C++ 的开发人员选择返回指向数组的指针而不是对象本身的原因?

Bri*_*ian 12

如果a是指针并且i具有整数类型,则a[i]始终与 相同*(a+i)。无需包含标题或任何内容即可使其工作。


Yak*_*ont 6

我想知道是否存在一些内置头文件或任何其他指令集,当我想访问数组的第 i 个元素时,我可以简单地编写 array[i] 并且它被编译器读取为 * (数组+i)

不,没有这样的标题或指令集,因为它是语言的一部分。

对于指针和整数类型,a[i] 表示 *(a+i)。这是一个如此强烈的声明:

int base_array[3]={1,2,3}; // an array of 3 elements
int* ptr_array = base_array; // base_array "decays" to a pointer to the first element
std::cout << 2[ptr_array] << "\n"; // huh?!?!
Run Code Online (Sandbox Code Playgroud)

打印 3,因为*(2+ptr_array)3; 即,它甚至可以向后工作