以下内容为自学笔记缺乏严谨性,如有错误和不足请大佬指正
基础:
print
函数的计算是从右向左进行;
int arr[] = { 6,7,8,9 };
int* ptr = arr;
printf("%d %d", *ptr, *(++ptr));//7 7
例如这段代码,输出结果为 7 7
因为print
函数的计算是从右向左进行所以,先进行*(++ptr)的计算然后才是*ptr,所以输出结果为7 7
进阶:
遇到i++
,会把此时i
的值当作最后的输出值,注意,确定为输出后,i
还会自增;
遇到i
或++i
,仅仅修改当前i
的值,最后才输出i
。
#include<stdio.h>
int main()
{
int i=2;
printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
printf("%d\n",i);
return 0;
}
输出结果为4552 \n 5
分析过程:
从右往左看:printf("%d,%d,%d,%d,\n",i++,++i,i,i++);
首先,i++,第四位的输出定格在2,再运算,i的值是3。
其次,i,第三位的输出不能确定,因为前面还有运算,此时i是3。
然后,++i,先运算,此时i的值是4,但第二位的输出还不能确定。
最后,i++,第一位的输出定格在4,再运算,i的值是5,此时可以确定倒数第二位和第三位的输出都是5
验证结论:
再在前面加一个++i,如果结论成立的话,所以的i和++i会变成6其余不变
int main()
{
int i = 2;
printf("%d,%d,%d,%d,%d,\n", ++i, i++, ++i, i, i++);
printf("%d\n", i);
return 0;
}