我完全犹豫要不要发布这个,但我希望它不会造成问题。
迂腐:大多数其他答案都是错误的:您创建的不是指向数组的指针。它是一个指向int
数组初始元素的指针。
我犹豫是否要发布它,原因很简单,这几乎可以肯定只是在您的问题中使用了错误的措辞——指向int
几乎可以肯定是您认为想要的指针,而这正是您真正得到的。
但是,有诸如指向数组的指针之类的东西。它很少有用,因为当/如果你对它进行指针数学运算(包括下标),指向数组的指针会增加它指向的数组的大小。在您的情况下,您分配 10int
秒。您可以使用指针的下标来引用int
数组中的 s,因此theName[0]
引用第一个int
、theName[1]
第二个int
等等——这正是您通常想要的。
如果您正在使用(例如)一个数组数组,并且想要一个指针一次遍历整行,那么您可能能够真正使用指向数组的指针,ptr[0]
第一行也是如此,ptr[1]
第二行,以此类推。例如:
#include <iostream>
static const int x = 20;
static const int y = 10;
int main() {
char data[y][x];
auto ptr_array = &data[0];
char *ptr_char = &data[0][0];
std::cout << "Address of entire array: " << (void *)data << "\n";
std::cout << "char *[0] = " << (void *)ptr_char << "\n";
std::cout << "char *[1] = " << (void *)(ptr_char+1) << "\n";
std::cout << "array *[0] = " << (void *)ptr_array << "\n";
std::cout << "array *[1] = " << (void *)(ptr_array+1) << "\n";
return 0;
}
char
我已将其更改为与( 而不是)的数组一起使用,int
以使数学更加明显—— sizeof(char) == 1
(根据定义),因此计算数学变得更容易一些。当我在我的机器上运行这段代码时,我得到的地址是:
Address of entire array: 0047FD2C
char *[0] = 0047FD2C
char *[1] = 0047FD2D
array *[0] = 0047FD2C
array *[1] = 0047FD40
如您所见,ptr[0]
无论哪种方式,都将数组的地址作为一个整体保存。但是,使用指向 的指针char
,ptr[1]
拥有一个更大的地址。然而,指向数组的指针拥有一个大于 0x40 - 0x2C = 0x14 = 20 的地址——这符合我们给数组 (20) 的 X 维度。换句话说,我们确实有一个指向数组的指针,并且该指针上的指针算术(或等效地,下标)一次就整个数组起作用。
不过我会重复一遍:至少如果我们忽略了您几乎可以肯定应该使用 an的事实,那么std::vector
您想要的类型和您获得的类型都是pointer to int
. 有这样的类型pointer to array
,但几乎可以肯定它不是你真正想要的。