int main() {
int arr[3] = { 1,3,5 };
int * ptr1 = arr;
int * ptr2 = &arr; // warning C4047: reference level between int * and int (*)[3] is different
return 0;
}
我知道'arr
'表示指针的起始地址值为数组'arr
'。同样,它是一个不可变的指针值。然后,难道不是'&arr
是指针'arr
'的地址,对吗?
答案 0 :(得分:2)
是的,但是类型不同。
对于定义为
的数组int arr[3] = { 1,3,5 };
在大多数情况下,在这种情况下,arr
会衰减为指向数组中第一个元素的指针,该元素的类型为int *
。因此,对于声明
int * ptr1 = arr;
LHS和RHS是同一类型。
另一方面,&arr
是指向3个int
数组的指针,换句话说,它的类型为int (*)[3]
。通过说
int * ptr2 = &arr;
您正在尝试将其分配给int *
。它们不是兼容类型。因此,警告。