C++指向数组的指针

3

我知道在C++中,数组的名称只是指向数组第一个元素的指针。例如:

int foo[5];

=> foo 是一个指向整型的指针,它指向数组中的第一个元素,也就是a[0]

但接下来我们有这个:

int (*foo)[5]

在这里,foo 是一个指向类型数组的指针。那么,foo 是一个指向指针(int 类型)的指针吗?


2
不,它是一个指向数组的指针。数组不是指针。 - chris
这一定是重复的,对吧? - Carl Norum
@CarlNorum,哦,让我数一下方法。 - chris
数组是指针,但有一些额外的开销,例如数组大小和填充。 - SwiftMango
2个回答

5

这是一个包含五个整数的数组:

int a[5];

这是一个指向包含五个整数的数组的指针:

int (*p)[5] = &a;

这是一个指向整数的指针:

int * q = a;  // same as &a[0]

2
在C++中,数组的名称只是指向数组第一个元素的指针。
这不是正确的:数组的名称可以“免费”转换为相应的指针类型,但它绝对不是指针。你可以通过比较指针和数组的大小来最简单地区分它们。
int foo[5];
int *ptr;
cout << sizeof(foo) << endl;
cout << sizeof(ptr) << endl;

你的第二个例子是一个指向大小为5的int数组的指针。

cout << sizeof(foo) << endl;
cout << sizeof(*foo) << endl;

在32位环境下,这个会打印出420,按预期工作。

那么在第二种情况下,如果它是一个指向数组的指针,指针的类型是什么?它只是“数组”吗? - Chin
@Chin 它的类型是“指向整数数组(大小为五)的指针”(名字相当长,是吧?)。 - Sergey Kalinichenko
@Chin 请查看这个ideone链接,它阐述了我上一个评论的观点。 - Sergey Kalinichenko
谢谢。在我的第二个例子中,我只想从内存图的角度知道它是否是指向指针的指针。但由于在第一个例子中它不是指针...我想我明白了。 - Chin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接