如何向接收int指针的函数便捷传入常量值?
如何直接向指针参数函数传入字面量5?
假设有如下函数:
void AAA(int i);
我们可以直接传入数值5,调用方式为:
AAA(5);
若函数定义为:
void BBB(int* pi);
尝试写成BBB(&5)无法通过编译,且不想通过定义临时变量int i = 5; BBB(&i);的方式调用,请问如何修改为正确的调用形式?
解决方案
- C语言(C99及以上标准)
使用C99引入的复合字面量语法,直接创建匿名的int对象并取其地址:
BBB(&(int){5});
复合字面量(int){5}会生成一个值为5的匿名int变量,其生命周期与当前代码块内的局部变量一致,完全满足函数调用的需求。
- C++环境
C++没有原生支持复合字面量,但可以通过类型转换结合const_cast实现:
BBB(const_cast<int*>(&static_cast<const int>(5)));
原理是先将字面量5转换为const int类型的临时对象,再通过const_cast移除const属性,最后取地址传入函数。
内容的提问来源于stack exchange,提问作者William Sung
相关产品推荐
相关产品推荐

