5-2-2 C中printf计算参数时是从右到左压栈的
#include <stdio.h> int main (int argc, char **argv) { int b = 3; int arr[] = {6,7,8,9,10}; int *ptr = arr; // *(ptr++) += 123; // printf ("%d,%d\n",*ptr,*(++ptr)); printf ("%d,%d\n",*ptr,*(ptr++)); return 0; } /* ----- End of main() ----- */ 输出 7,6
关于*(ptr++)执行的先后顺序:我一开始认为:由于括号优先,因此先执行括号中的自加,再取值。
可实际上是:先取ptr指向的数组元素的值,再自加。并且去掉括号即*ptr++,它的结果完全相同。
#include <stdio.h> int main (int argc, char **argv) { int b = 3; int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123; printf ("%d,%d\n",*ptr,*(++ptr)); // printf ("%d,%d\n",*ptr,*ptr++); return 0; } /* ----- End of main() ----- */ 输出 8,8
程序运行完后数组arr[]={129,7,8,9,10}。
时间: 2024-10-03 14:47:05