在C语言中,(数组名称)和&(数组名称)之间有什么区别?

时间:2019-01-07 07:07:11

标签: c arrays pointers

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'的地址,对吗?

1 个答案:

答案 0 :(得分:2)

是的,但是类型不同。

对于定义为

的数组
int arr[3] = { 1,3,5 };

在大多数情况下,在这种情况下,arr会衰减为指向数组中第一个元素的指针,该元素的类型为int *。因此,对于声明

int * ptr1 = arr;

LHS和RHS是同一类型。

另一方面,&arr是指向3个int数组的指针,换句话说,它的类型为int (*)[3]。通过说

int * ptr2 = &arr; 

您正在尝试将其分配给int *。它们不是兼容类型。因此,警告。