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数组的指针。我尝试使用&a
和a
初始化它。它只适用于第一种。
它们不是数组第一个元素的地址吗?
答案 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 int
到int *
的数组。因此,他们在作业中不兼容,即使他们的地址也相同。