笔试题一道
#include <stdio.h>
main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++)+=123;
printf("%d,%d ",*ptr,*(++ptr));
}
~~~~~~~~~~~~~~~~~~~~~~~`
答案及解释...
问题点数:10、回复次数:14Top
1 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-11-01 16:57:36 得分 0
printf("%d,%d ",*ptr,*(++ptr)); 这句又依赖编译器了,函数参数求值顺序未定,不要在传参的表达式里面改变变量的值Top
2 楼copine()回复于 2006-11-01 17:02:29 得分 0
200,8
include <stdio.h>
main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr; //指向数组开始位置
*(ptr++)+=123; //指向第二个元素并且加上123,7+123=200
printf("%d,%d ",*ptr,*(++ptr)); //输出当前和下一个元素,也就是第二个和第三个
}
Top
3 楼itoaer(Maxthon2做的太烂)回复于 2006-11-01 17:02:48 得分 10
输出为8,8
*(ptr++)+=123;
ptr++直到整条语句结束后才生效,因此是把arr[0]加了123,然后ptr移动到arr[1]的位置
然后printf("%d,%d",*ptr, *(++ptr)); 从右往左求值,到逗号的时候++ptr生效,因此首先++ptr移动到arr[2],再求*(++ptr)=8,然后求*ptr的时候实际上ptr已经移动到了arr[2]的位置,所以*(ptr)=8
整个程序执行后arr的内容是{129,7,8,9,10}Top
4 楼copine()回复于 2006-11-01 17:10:08 得分 0
*(ptr++)+=123;
ptr++直到整条语句结束后才生效
===================================
括号是用来看的?Top
5 楼andytopxu()回复于 2006-11-01 17:11:24 得分 0
楼上的,注意printf("%d,%d",*ptr, *(++ptr)); 中时候已经求了两次值(++)
应该是8,9Top
6 楼morphymorphy(叔,人家还小啦~~ =_=)回复于 2006-11-01 17:12:33 得分 0
*(ptr++)+=123; 与 *(ptr++)=123;
导致结果相同的原因??
Top
7 楼andytopxu()回复于 2006-11-01 17:12:52 得分 0
晕,是我错了,vc6编译结果是8,8Top
8 楼andytopxu()回复于 2006-11-01 17:13:47 得分 0
期待高人解释Top
9 楼copine()回复于 2006-11-01 17:14:55 得分 0
楼上的,注意printf("%d,%d",*ptr, *(++ptr)); 中时候已经求了两次值(++)
====================================================================
哪里有两次,这里的++ptr明明是从第二个移到第三个
Top
10 楼andytopxu()回复于 2006-11-01 17:15:39 得分 0
*(ptr++)+=123;
ptr++直到整条语句结束后才生效
===================================
括号是用来看的?
-------------------------------------------
括号确实是用来看的Top
11 楼copine()回复于 2006-11-01 17:19:11 得分 0
晕,是我错了,vc6编译结果是8,8
==============================
我没有运行过,如果是8,8的话那么就是这一句的问题
printf("%d,%d ",
*ptr,
*(++ptr))//在这里先进行了指针运算,然后才计算两个*(ptr),这里的顺序就不太清楚了。Top
12 楼copine()回复于 2006-11-01 17:20:40 得分 0
最后是把第三个元素输出了两次,说括号是看的的人,把程序改改,输出所有的数组成员看看。Top
13 楼copine()回复于 2006-11-01 18:01:31 得分 0
唉,无语了,孺子不可教!Top
14 楼jinyanfang()回复于 2006-11-01 19:08:15 得分 0
有意思Top




