此c语言例题中所得的结果为什么输出的是0010203040呢而不是0000000000(按自加号的优先级麻烦说详细点?
答案:4 悬赏:30 手机版
解决时间 2021-04-15 05:04
- 提问者网友:蔚蓝的太阳
- 2021-04-14 07:25
此c语言例题中所得的结果为什么输出的是0010203040呢而不是0000000000(按自加号的优先级麻烦说详细点?
最佳答案
- 五星知识达人网友:像个废品
- 2021-04-14 08:59
printf("%d\n",*p ++);
"++"优先级更高
第一轮:
p[0] = 0;
* p++ =0;//此后p指针自增1
第二轮:
p[1] = 1;//因为第一轮p自增1,其实相当于第一轮的p[2] = 1;
* p++ =0;//此后p指针再自增1
第三轮:
p[2] = 2;//因为第一,二轮p都自增1,其实相当于第一轮的p[4] = 2;
* p++ =1;//因为前面都有自增,此时的p相当于第一轮的(p+2)//此后p指针再自增1
.......
以后逻辑都是这样,导致最后数据不正确,所以printf("%d\n",(*p) ++);是正确的
"++"优先级更高
第一轮:
p[0] = 0;
* p++ =0;//此后p指针自增1
第二轮:
p[1] = 1;//因为第一轮p自增1,其实相当于第一轮的p[2] = 1;
* p++ =0;//此后p指针再自增1
第三轮:
p[2] = 2;//因为第一,二轮p都自增1,其实相当于第一轮的p[4] = 2;
* p++ =1;//因为前面都有自增,此时的p相当于第一轮的(p+2)//此后p指针再自增1
.......
以后逻辑都是这样,导致最后数据不正确,所以printf("%d\n",(*p) ++);是正确的
全部回答
- 1楼网友:轻熟杀无赦
- 2021-04-14 11:29
你是for没弄清吧
- 2楼网友:雾月
- 2021-04-14 09:54
首先理解一下p[i],p[i] = *(p+i)
理解*p++,先取内容,在自增1.#include
#include
#include
int main(void)
{
int *p = (int *)malloc(sizeof(int) * 10);
memset(p,0,sizeof(int)*10);
int i;
for(i = 0;i < 10; i ++)
{
*(p+i)= i;//做个替换。如果要自加,那么这边改为*p=i;
printf("%d ",*p);
p++;//这个不需要,能完成正确的赋值。
}
free(p);
return 0;
}
- 3楼网友:空山清雨
- 2021-04-14 09:18
第一次:p[0]=0,
第二次:p[1]=1,这时候p[0]是上次的p[1], 这次是p[1]是上次的p[2],所以应该出现了001
第三次:p[2]=[2],折时候p[0]是第一次的p[2],这次是p[2]是第一次的p[4],所以出现了00102
依次类推
。。。
**************************************************************************所以出现了0010203040
第二次:p[1]=1,这时候p[0]是上次的p[1], 这次是p[1]是上次的p[2],所以应该出现了001
第三次:p[2]=[2],折时候p[0]是第一次的p[2],这次是p[2]是第一次的p[4],所以出现了00102
依次类推
。。。
**************************************************************************所以出现了0010203040
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯