printf中的优先级似乎发生了变化
precedence seems to change in printf
假设您有一个int指针变量int* q = malloc(sizeof(int))
现在做这个
*q++;
由于++
具有优先权,q
将指向某个其他存储器位置
然而在printf 中也这样做
printf("%d",*q++);
赋予取消引用(*)运算符优先级??
++是后缀增量。它的优先级高于一元*
。然而,更新变量的副作用是在变量评估(6.5.2.4)之后完成的:
结果的值计算在边之前排序更新操作数的存储值的效果。
因此,*q++
将始终为您提供*q
的值,无论它在代码中的哪个位置使用。
这就是前缀和后缀增量之间的区别。*++q
会先增加指针,然后计算新地址的值。
有两个为增量定义的运算符-增量前和增量后-它们都返回一个值!就好像你调用了一个函数:
printf("%d", *f(q));
预增量运算符首先递增并返回新值,后增量运算符返回值,然后递增。
好吧,这只是为了说明——当然,从技术上讲,它不能在返回后递增,所以它会记住初始值,然后递增并返回记住的值。顺便说一句,这就是为什么预增量比后增量更有效的原因,除非编译器优化差异。。。
相关文章:
- 我正在将一个 std::string 传递给一个 boost 函数,该函数对该类型进行常量引用,但该值发生了变化
- c++问题:给一个变量赋值后,另一个变量发生了变化
- libstdc++的make_shared布局在gcc 4.x和gcc 6.x之间是否发生了变化?
- 为什么我的 int 在 C++ 程序中间发生了变化?
- 共享指针和回调注册的结构.由于我之外的原因调用回调时,原始指针值发生了变化
- 这个树搜索功能让我发疯.它返回 NULL,但不知何故主函数中的值发生了变化
- 默认初始化的含义在C 11中发生了变化
- c_str()的寿命是否在g++4.8.4和g++5.3.1之间发生了变化
- C++11与C++98转换运算符的行为发生了变化
- printf中的优先级似乎发生了变化
- 更改字符集后,MFC 应用程序的视觉外观发生了变化
- 在矢量中推回后,数字发生了变化
- 为什么std::vector的构造函数接口在C++11中发生了变化
- 对象似乎正在删除自己,或者在构造函数之后内存发生了变化
- 在c++中,对象可以警告类它已经发生了变化吗?
- 为什么c++ 17中std::函数的operator()发生了变化?
- 如何在sqlite3中检查列的数量是否发生了变化
- 当我没有给变量赋新值时,为什么变量的值发生了变化?
- 为什么退出函数时节点值发生了变化
- 检测表单中任何小部件的状态是否发生了变化