以下选项中,对指针变量p不正确的操作是:

以下选项中,对指针变量p不正确的操作是:
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;
解释清楚哦!!!!!

楼上所有的说法都是错误的,我不知道你们有没有调试过,我是经过调试的,

错误的答案是a,c,d。下面我说说原因:
a错:因为p存放的是内存的地址,&a表示的是地址的地址,类型不匹配,会产生编译错误。
c错:因为数组a表示的是常量地址,常量地址是不能赋值的,会产生编译错误。
d错:d错在*p2=a,*p2表示的是内存地址中的值,而a是常量地址,类型不匹配,产生编译错误。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-29

我觉得D选项的错误不是 :

“错在*p2=a,*p2表示的是内存地址中的值,而a是常量地址,类型不匹配,产生编译错误。”

D选项的错误应该是 指针p1没有确定的指向,就不能取值,即*p1,所以就不能:*p1=*p2;。

int *p1,*p2=a;这个是没有问题的!

例子:*p1=*p2 就是一个赋值操作

#include <stdio.h>
int main() {

int a[5]={1,2,3,4,5};  
int b[5]={0,0,0,0,0};
int i;

int *p1=b, *p2=a; 
for(i=0;i<5;i++)
printf("%d ",b[i]);
*p1=*p2;
printf("\n");
for(i=0;i<5;i++)
printf("%d ",b[i]);
    return 0;
}

运行结果为:

0 0 0 0 0

1 0 0 0 0

第2个回答  2018-12-11
答案说B错,是不对的。应该是C错。用gcc编译调试的结果:A有警告无错误,BD无警告无错误,C报错,所以C错误。
C错在a=1000这个点,p=1000还是没错的。
a是数组首地址,是常量,无法改变。数组a的元素是可以改变的。
第3个回答  2014-01-02
关于指针是C语言中最难理解的一个知识点;
*p是定义p为指针;
&a是取地址,其中a为值;
所以可以定义p=&a,因为两者都是地址;
所以你选择的时候一定保证两者代表的意义一样;

像b中的没有错,但是p=a显然是把a【0】的值当做指针了,这样显然不是程序的意思;

而对于题目中提出的数组,要知道a代表的是数组a的第一个元素,即为a【0】;
第4个回答  2014-01-02
C,不管在什么编程语言中都不允许*p=a=1000这样的连续赋值
相似回答