这个问题在这里已有答案:
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
'的地址的想法,对吧?
是的,但类型不同。
对于定义的数组
int arr[3] = { 1,3,5 };
对于大多数情况,arr
衰减到指向数组中第一个元素的指针,在这种情况下,其类型为int *
。所以,对于声明
int * ptr1 = arr;
LHS和RHS属于同一类型。
另一方面,&arr
是指向3个int
s数组的指针,换句话说,它是int (*)[3]
类型。通过说
int * ptr2 = &arr;
您正在尝试将其分配给int *
。它们不兼容。因此警告。