printf解析方式
来源:互联网 发布:c语言里的共用体怎么用 编辑:程序博客网 时间:2024/06/15 05:32
先看一段代码:
void main(void){ int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d",*ptr,*(++ptr));}
程序运行最终输出的结果是8,8
其实刚开始我也很纳闷,*ptr不是arr[1] = 7吗?怎么回事呢
我认为一个很关键的问题是:可能有很多人把*(ptr++)+=123;
展开的时候变成了*(ptr++)= *(ptr++) + 123;
,这样的话得到的结果就是9,9,这是个明显的错误。因为*(ptr++)+=123;
是*(ptr)+=123;
和ptr++;
两句话的组合。若要展开,即为*(ptr)= *(ptr)+123;
和ptr++;
,而不是想当然将ptr++;
这句话执行两次。
还有一个点,非常重要,当我们即使按照上面提到的方式来展开的时候,发现任然有问题,难道不是应该得到7,8这样的结果吗?
这是我们可能就会想为什么会这样,于是我做了一个小测试:
printf("%d,%d",*(++ptr),*(ptr));
将上面两个结果放过来打印,意外的是结果竟然是8,7
可能大家已经发现问题所在,这也就是今天要说的,printf在有多个参数时,其解析方式是从后面开始的,所以也就有了今天这篇文章。
阅读全文
1 0
- printf解析方式
- printf解析
- Debug方式取代printf
- 变参数printf解析
- printf函数解析
- Debug方式取代printf满天飞
- printf() 函数压栈方式
- printf() 函数压栈方式 从右到左压栈
- 很好的debug方式取代printf满天飞
- C语言printf对齐输出方式
- c语言,printf中的*号解析
- C语言中printf()函数全解析
- printf、sprintf、snprintf深度用法解析
- printf
- printf
- printf
- printf()
- printf
- HOG梯度直方图计算原理
- SpringBoot整合Mybatis实例
- 互联网协议入门(二)
- Strncmp函数
- SSM整合与测试(Spring、Spring MVC、MyBatis)
- printf解析方式
- 复制功能测试的测试点
- 3、schema.xml中域及动态域
- bootstrap基本模板解析
- linux内核内存管理学习之二(物理内存管理--伙伴系统)
- RK3288 6.0 双屏异显,横屏+竖屏
- 欢迎使用CSDN-markdown编辑器
- c# Semaphore(信号量)
- Ubuntu登录后蓝屏不显示桌面的解决办法