3

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

int foo[5];

=> foo是一个int类型的指针,它指向数组的第一个元素,即a[0]

但是,我们有这个:

int (*foo)[5]

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

4

2 回答 2

5

这是一个由五个整数组成的数组:

int a[5];

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

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

这是一个指向 int 的指针:

int * q = a;  // same as &a[0]
于 2012-10-17T03:37:14.903 回答
2

在 C++ 中,数组的名称只是指向数组第一个元素的指针

这是不正确的:数组的名称可以“免费”转换为相应的指针类型,但它绝对不是指针。最简单的方法是比较指针和数组的大小:

int foo[5];
int *ptr;
cout << sizeof(foo) << endl;
cout << sizeof(ptr) << endl;

int您的第二个示例是指向大小为 5 的 s数组的指针。

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

在 32 位环境中,这会按预期打印 420

于 2012-10-17T03:37:36.990 回答