永发信息网

有错没有:*p++=*q++

答案:3  悬赏:20  手机版
解决时间 2021-04-05 16:24
  • 提问者网友:川水往事
  • 2021-04-05 01:48
在C中,p和q指针分别指向两个数组第一位。
这里的运算顺序是什么?是赋值后指针分别后移一位还是指针所指内容自增+1?
++在后面不是应该先赋值才移动?
最佳答案
  • 五星知识达人网友:廢物販賣機
  • 2021-04-05 01:54
这个试子是两边的指针各自移动一位,然后再赋值,算术运算符的优先级高于赋值运算符。
我上面的回答是错,应该是先赋值,然后再各自移动。
下面的代码可以验证:
#include "stdio.h"
main()
{
int a[5]={1,2,3,4,5};
int b[5]={5,4,3,2,1};
int *p,*q;
int i=0,j=0;
p=a;
q=b;
for(j=0;j<5;j++)
{
printf("%d\n",*q++);
}

for(i=0;i<5;i++)
{
*p++=*q++;
}
for(j=0;j<5;j++)
{
printf("%d\n",*p++);
}
}
全部回答
  • 1楼网友:零点过十分
  • 2021-04-05 03:20
双目运算符“++”的运算级别是高于“*”的,所以先执行++。 那两楼都说的不够详细,还要看指针变量p和q的类型,比如说是int类型(占四个字节) 假设q存储的地址是100,那执行q++后所指向的地址就是104(并不是101,要注意这一点)(p++类似,不再说明) 再把104这个地址的值取出来,赋给改变后p所指向的地址的值,这就实现了更改值的操作。 再说明p++的地址==p原来指向的地址+类型所占字节数*1 如果是*p+n(n是整数)的意思是p原来指向地址+类型所占字节数*n所在地址存放的值
  • 2楼网友:詩光轨車
  • 2021-04-05 02:31
没错,相当于p,q分别指向下一位,并且把q指向的值赋值给p指向的值 char *mystrcpy(char *dst,char *src) { while ((*dst++=*src++)!='\0') return dst; } 简单的表达一下,就是字符复制 先是指针移动再*取值,再赋值 (++的运算优先级>*)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯