以下对指针p不正确的操作是?

来源:百度知道 编辑:UC知道 时间:2024/05/25 03:10:05
A. int a[5],*p; p=&a;
B. int a[5],*p; p=a;
C. int a[5]; int *p=a=1000;
D. int a[5]; int *p1, *p2=a; *p1=*p2;

答案说是B..
为什么??
a代表数组a[5]的首地址,把首地址赋给p有错吗?
我怎么觉得A错了呢,还有C也不对,a是地址常量,不能对其赋值,难道C是对的吗?是不是答案错了??

这个东西试试不就知道了,
GCC的结果是:

AC不能通过编译,BD可以通过编译。

A显然不对,p=&a这条明显错误,a已经是一个地址值,再取值那就成二重的地址值了,不能对p这样的一次地址值赋值。

C编译错误,编译器告诉不能把int常量赋给数组名

答案应该错误

A错 p=&a 应该为 p=&a[0] 或者p=a

只有B是对的 除了楼主所说的之外
D中 p1没有初始化,不能能对其进行解引用并赋值