在C语言中,(数组名称)和&(数组名称)有什么区别? [重复]

问题描述 投票:3回答:1
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'的地址的想法,对吧?

c arrays pointers
1个回答
2
投票

是的,但类型不同。

对于定义的数组

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

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

int * ptr1 = arr;

LHS和RHS属于同一类型。

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

int * ptr2 = &arr; 

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

© www.soinside.com 2019 - 2024. All rights reserved.