在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;