C语言 main() {int a[5]={1,2,3,4,5},b[4]={6,7,8,9},*p=a,*q=b}

main()
{int a[5]={1,2,3,4,5},b[4]={6,7,8,9},*p=a,*q=b
p+=2;q+=3;
*p=*(q)+3;
q--;
*(q-1)=*(p+1)-5;
printf("%d\n",*p);
printf("%d|n",*q);
}
求具体推导过程 谢谢

main()  
{int a[5]={1,2,3,4,5},b[4]={6,7,8,9},*p=a,*q=b//p指向a的首地址,即1,q指向b,即6
  p+=2;q+=3;//p地址后移2位,指向3,q同理指向9
  *p=*(q)+3;//赋值语句,将q指向的内容加3赋给p,则p指向的值3变成12,q依旧为9
      q--;//q地址前移1位,即8
   *(q-1)=*(p+1)-5;//将p指向位置的下一位的内容即4减去5得-1,赋给q的前一位,则q的前一位变成-1,但q的指向位置没有改变
printf("%d\n",*p);//输出p的内容,即为12
printf("%d|n",*q);//输出q的内容,即为8

这里涉及到很多小知识点,如果不理解,欢迎追问,若满意,请采纳,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-08
int
a[
]={0,1,2,3,4,5,6,7,8,9}:意思是a数组为包含{0,1,2,3,4,5,6,7,8,9}的整数数组,
int
a[
]={0,1,2,3,4,5,6,7,8,9},*p=a:p是等效于a的整数指针,你应该这样读int
*p
=a;(*号跟着变量走)定义了一个指针等于a数组首地址。
第2个回答  2015-01-03
你应该自己推导,哪里挡住了你的思路,再提问,这样对你理解知识有帮助!
第3个回答  2015-01-03
p+=2;q+=3;p指针指向a[2],q指针指向b[3]

*p=*(q)+3;把a[2]换成12
q--;q指针指向b[2]
*(q-1)=*(p+1)-5;b[1]换成-1
printf("%d\n",*p);输出12

printf("%d|n",*q);8
第4个回答  2015-01-03
*p=a 表示指针p指向数组a的首地址即第一个元素;*q=b指针q指向数组b的首地址即第一个元素;
p+=2表示数组a的第三个元素,q+=3表示b数组的第四个元素。因此*p=3,*q=9;
*p=*(q)+3;这一句是把数组的第三个元素修改为7;此时a={1,2,12,4,5}

q--;此时q应指向数组b的第三个元素

*(q-1)=*(p+1)-5;这一句是修改b中第二个元素为a中第四个元素的值减去5因此b={6,-1,8,9}

一次输出的结果应为12,8;
相似回答