Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,(数组名称)和&;(阵列名称)?_C_Arrays_Pointers - Fatal编程技术网

在C语言中,(数组名称)和&;(阵列名称)?

在C语言中,(数组名称)和&;(阵列名称)?,c,arrays,pointers,C,Arrays,Pointers,我知道“arr”表示起始地址值为数组“arr”的指针。此外,它是一个不可变的指针值。那么,“&arr”不是指针“arr”的地址吗 是的,但类型不同 对于定义为 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

我知道“
arr
”表示起始地址值为数组“
arr
”的指针。此外,它是一个不可变的指针值。那么,
“&arr
”不是指针“
arr
”的地址吗

是的,但类型不同

对于定义为

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
衰减到指向数组中第一个元素的指针,在本例中,该元素的类型为
int*
。那么,为了这个声明

int*ptr1=arr

左侧和右侧为同一类型

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

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

您正试图将其分配给
int*
。它们是不兼容的类型。因此发出警告。

我认为这个答案适合我的情况,谢谢!!
int * ptr2 = &arr;