C语言一道简单的问题.请高手指点一下.
程序是这样的:inta=2,*p=&a,*q=&a;printf("%d%d\n",*p++,*(q++));p=&a;q=&a;printf("%d%d\n",*p,(...
程序是这样的:
int a=2 ,*p=&a,*q=&a;
printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d %d\n" ,*p,(*q)++);
结果是: 2 2
3 2
我想请问一下,如何时得出上面的答案呢? 运算顺序的先后过程是怎么样?
我要找 是否忘记了一切 , 你回答的很好,可是还有一半!
末学很高兴,还有两位大哥的热心回答, 三楼的 31903891 回答的很详细,我有点明白了.谢谢. 展开
int a=2 ,*p=&a,*q=&a;
printf("%d %d\n",*p++,*(q++));
p=&a;q=&a;
printf("%d %d\n" ,*p,(*q)++);
结果是: 2 2
3 2
我想请问一下,如何时得出上面的答案呢? 运算顺序的先后过程是怎么样?
我要找 是否忘记了一切 , 你回答的很好,可是还有一半!
末学很高兴,还有两位大哥的热心回答, 三楼的 31903891 回答的很详细,我有点明白了.谢谢. 展开
4个回答
展开全部
你这题相当复杂,我经过多次调试才得出答案,++p,或者p++之前还是之后用稍微学过的都知道,这里我就不说了。
这里讲重点,++和*是运算优先级相同的运算符,因此同时出现在一个语句中而且没有()的情况下就看语句的结合规律,它们的结合规律是自右向左。
因此第一个printf语句中*p++,先结合++,也就是说在调用p之后p的地址++,因此对a的值没有影响,第一句运行完,a的值仍是2。
再看第二句,这里更绝,语句是从右向左读的,注意(*q)++这里有括号,因此在输出了a的值后a++了,因此前面的*p的值是3了,这里最应该注意的是语句是从右向左读的,你将(*q)++改成(*q)--就能验证这一事实。
说了这么多,希望你在C语言的学习中多看多想,还有更重要的是多动手测试你的程序,自己找到答案才是最有收获的,希望能在今后的学习中和大家共同进步。
这里讲重点,++和*是运算优先级相同的运算符,因此同时出现在一个语句中而且没有()的情况下就看语句的结合规律,它们的结合规律是自右向左。
因此第一个printf语句中*p++,先结合++,也就是说在调用p之后p的地址++,因此对a的值没有影响,第一句运行完,a的值仍是2。
再看第二句,这里更绝,语句是从右向左读的,注意(*q)++这里有括号,因此在输出了a的值后a++了,因此前面的*p的值是3了,这里最应该注意的是语句是从右向左读的,你将(*q)++改成(*q)--就能验证这一事实。
说了这么多,希望你在C语言的学习中多看多想,还有更重要的是多动手测试你的程序,自己找到答案才是最有收获的,希望能在今后的学习中和大家共同进步。
展开全部
由于指针的间访操作和++操作是在同一个优先级,
结合性从右至左,所以
*p++
先做p++,再做*操作,即*(p++)
输出<<优先级比*和++低,先做*和++运算,最后输出。
结合性从右至左,所以
*p++
先做p++,再做*操作,即*(p++)
输出<<优先级比*和++低,先做*和++运算,最后输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关键在你定义的变量
int a=2 ,*p=&a,*q=&a;
a=2, 内存里放一个 int 类型的数据 值为 2;
让 p 指向 a 的内存 也就是等于 p 的值 也为 2;
q 同理 ;
输出的时候 , 分清楚 ++p 与 p++ 的先后顺序
++p 输出 3 在运算之前 自身先 加 1
p++ 输出 2 在运算之后(也就是输出之后) 加 1 ,所以只能在屏幕上看见 2
很好的问题,很有专研精神,努力~!
-------------------------------------------------------
找我~?
有什么尽管问~
我会的都告诉你~
int a=2 ,*p=&a,*q=&a;
a=2, 内存里放一个 int 类型的数据 值为 2;
让 p 指向 a 的内存 也就是等于 p 的值 也为 2;
q 同理 ;
输出的时候 , 分清楚 ++p 与 p++ 的先后顺序
++p 输出 3 在运算之前 自身先 加 1
p++ 输出 2 在运算之后(也就是输出之后) 加 1 ,所以只能在屏幕上看见 2
很好的问题,很有专研精神,努力~!
-------------------------------------------------------
找我~?
有什么尽管问~
我会的都告诉你~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x++是先用x的值再把x加一
这样你该懂了把
这样你该懂了把
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询