
int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr)); 求答案和原理
6个回答
展开全部
答案是:8,9
原理:*ptr=arr,所以ptr=6;
*(ptr++)+=123,先执行 *(ptr++),则 *(ptr++)=arr[0]即6,,此时*ptr=arr[1],然后执行 6+123=129,此时*ptr=arr[2]即8;
*(++ptr)相当于先执行++ptr,则相当于输出arr[3]即9.
原理:*ptr=arr,所以ptr=6;
*(ptr++)+=123,先执行 *(ptr++),则 *(ptr++)=arr[0]即6,,此时*ptr=arr[1],然后执行 6+123=129,此时*ptr=arr[2]即8;
*(++ptr)相当于先执行++ptr,则相当于输出arr[3]即9.
展开全部
结果:
8,8
int *ptr=arr;
*(ptr++)+=123; //这里运行后,ptr = arr[1], arr[0] = 129
printf("%d,%d",*ptr,*(++ptr)); //这里先计算++ptr,ptr =arr[2], 所以相关于
printf("%d,%d",arr[2],arr[2]);
8,8
int *ptr=arr;
*(ptr++)+=123; //这里运行后,ptr = arr[1], arr[0] = 129
printf("%d,%d",*ptr,*(++ptr)); //这里先计算++ptr,ptr =arr[2], 所以相关于
printf("%d,%d",arr[2],arr[2]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前几句都很简单,只说printf那一步
在printf前,*ptr = 7
执行printf:在VC中,printf执行的顺序是自右向左,所以先执行*(++ptr)。。。。。。
所以结果是:8,8
外加一条:printf在不同的编译环境下运算的顺序是不同滴~~~~~所以结果不一样也正常
在printf前,*ptr = 7
执行printf:在VC中,printf执行的顺序是自右向左,所以先执行*(++ptr)。。。。。。
所以结果是:8,8
外加一条:printf在不同的编译环境下运算的顺序是不同滴~~~~~所以结果不一样也正常

你对这个回答的评价是?
展开全部
答案:8,8
int arr[]={6,7,8,9,10};
int *ptr=arr;
// arr[0]+=123
*(ptr++)+=123;
// 上一语句中,ptr 已经转向arr[1]
printf("%d,%d",*ptr,*(++ptr));
int arr[]={6,7,8,9,10};
int *ptr=arr;
// arr[0]+=123
*(ptr++)+=123;
// 上一语句中,ptr 已经转向arr[1]
printf("%d,%d",*ptr,*(++ptr));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在vc++ 2005下测试,结果为:
8,8
printf("%d,%d",*ptr,*(++ptr)); 这个语句有二义性,在不同编译系统下,结果可能不同。没必要究结。
8,8
printf("%d,%d",*ptr,*(++ptr)); 这个语句有二义性,在不同编译系统下,结果可能不同。没必要究结。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询