#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]
为什么只使用数组的名称会给出这个警告,因为数组的名称和数组的地址是相同的?
答案 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_arr
(int(*)[10]
)的类型不兼容。
另外
wheras name of array and address of array are meant to be same ?
没有。 arr
(数组的名称衰减到指向第一个元素的指针),而&arr
并不意味着相同。 arr
与&arr[0]
答案 2 :(得分:2)
数组的名称是指向其第一个元素的指针,该元素是一个整数,而不是指向整个数组的指针。