指向int数组的C ++指针

时间:2017-07-20 02:14:37

标签: c++ arrays pointers

int main(){
    int a[4] = { 1,2,3,4 };
    int(*b)[4] = &a; //with a doesn't work
    cout << a << &a  << endl; //the same address is displayed
}

因此,int(*b)[4]是一个指向int数组的指针。我尝试使用&aa初始化它。它只适用于第一种。
它们不是数组第一个元素的地址吗?

2 个答案:

答案 0 :(得分:6)

从概念上讲,他们并不是一回事。即使它们指向相同的地址,它们也是不兼容的指针类型,因此它们的用法也不同。

&a获取类型为int [4]的数组的地址,然后它表示指向数组的指针(即int (*)[4])。

a会导致array-to-pointer decay,然后它表示指向int的指针(即int*)。

答案 1 :(得分:0)

看一下这段代码

int a[4] = { 1, 2, 3, 4 } // array 
int(*b) = a // pointer to the first element of the array

您应该知道int(*b)等于int(*b)[0]a[0]。 因此,它是指向整数(int*)的指针,而不是指向整数数组的指针。

您的案例中会出现类型问题。

注意到C是强类型语言。看看你的作业陈述。

int(*b)[4] = &a;

参数为int(*ptr)[4]。这意味着您必须严格传递该类型的参数,即int *

您正在尝试将指针传递给4 intint *的数组。因此,他们在作业中不兼容,即使他们的地址也相同。