指向数组的指针的地址在没有'&'的情况下分配时发出警告

时间:2014-08-28 07:10:51

标签: c arrays pointers

#include<stdio.h>
int main() 
 {
   int (*p_arr)[10];
   int (*ptr)[10];
   int arr[10] = {1,2,3,4,5,6,7,8,9,0};
   ptr = &arr;
   p_arr = arr;
}

编译时会出错

warning: assignment from incompatible pointer type [enabled by default]

为什么只使用数组的名称会给出这个警告,因为数组的名称和数组的地址是相同的?

3 个答案:

答案 0 :(得分:3)

当你说

ptr = &arr;

L.H.S int(*)[] R.H.S 也是int(*)[]。因此没有问题。

现在让我们来看看

p_arr = arr

L.H.S int(*)[] R.H.S int[]。 因此,警告为assignment from incompatible pointer type

答案 1 :(得分:3)

有关

 ptr = &arr;

两者都具有兼容的类型int(*)[]

案例

 p_arr = arr;

此处arr的类型int[10]p_arrint(*)[10])的类型不兼容。

另外

wheras name of array and address of array are meant to be same ?

没有。 arr(数组的名称衰减到指向第一个元素的指针),而&arr并不意味着相同。 arr&arr[0]

相似

答案 2 :(得分:2)

数组的名称是指向其第一个元素的指针,该元素是一个整数,而不是指向整个数组的指针。