1. #include<stdio.h>  
  2. int main()  
  3. {  
  4. printf();  

答案为D

  • 执行完(*ptr++)+=123;后arr[]={129,7,8,9,10}

  • 执行printf("%d.%d\n",*ptr,*(++ptr));时,根据c语言中的函数参数压栈顺序--从右向左,首先计算表达式*(++ptr)并将其压入栈中,接着计算*ptr也将其压入栈中,再将“%d.%d\n”压入栈中,然后执行call指令。由此可见,最先压入的两个参数的表达式值是一样的,都是8。

另转载关于*p++,*(p++),(*p)++的精彩分析

http://zhidao.baidu.com/question/226451389.html

(*p)++,是先取指针P的值,然后对其值进行++运算,
*(p++),是先对指针P进行++运算,然后再取取值,
*p++,同*(p++),因为按优先级来看,*和++是同级,他们都是从右到左的顺序进行运算,所以先++,再*。

如果
char q[5] = "am";
char *p = q;
那么,
(*p)++后,p就变成了"bm";因为是进行对其首元素进行加1运算
*(p++)后,p就变成了"m",因为是先指向下一个元素,再进行取值运算,
*p++同上面,
如果只是征对这3个语句赋值给其他变量的话,3个的结果都是a,在这里。
char o = (*p)++;
char m = *(p++);
char n = *p++;
都是a。

分享给你的朋友吧: