printf("%d\n",*(ptr++))讲解

来源:互联网 发布:阿里云服务器备案时间 编辑:程序博客网 时间:2024/06/06 03:41

C代码如下:

[cpp] view plaincopyprint?
  1. int main()  
  2. {  
  3.     int arr[] = {6,7,8,9,10};  
  4.     int *ptr = arr;  
  5.     *(ptr++) += 123;  
  6.     printf("%d ,%d/n",*ptr,*(++ptr));  
  7.     return 0;  
  8. }  
  9. //结果为 8  8  

解释如下:

1.
int arr[]={6,7,8,9,10};
int *ptr=arr;//现在ptr指向6
*(ptr++)+=123;//现在ptr指向7,第一个元素变为129
printf("%d,%d",*ptr,*(++ptr)); //考虑从右往左计算,先是*(++ptr),现在ptr指向8,然后*ptr也是8,输出8,8

2.
printf的参数,函数printf从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有从右边开始处理的。