在C中,p和q指针分别指向两个数组第一位。
这里的运算顺序是什么?是赋值后指针分别后移一位还是指针所指内容自增+1?
++在后面不是应该先赋值才移动?
有错没有:*p++=*q++
答案:3 悬赏:20 手机版
解决时间 2021-04-05 16:24
- 提问者网友:川水往事
- 2021-04-05 01:48
最佳答案
- 五星知识达人网友:廢物販賣機
- 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++);
}
}
我上面的回答是错,应该是先赋值,然后再各自移动。
下面的代码可以验证:
#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;
}
简单的表达一下,就是字符复制
先是指针移动再*取值,再赋值 (++的运算优先级>*)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯