You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中无法对字面量1取地址?‘lvalue required’编译报错解析

为什么&1编译失败?

编译报错lvalue required as unary ‘&’ operand的核心原因是:一元&运算符的操作数必须是左值,而字面量1是右值,没有可被取址的固定内存区域。

具体拆解:

  • 左值是C语言里代表可寻址内存的表达式(比如变量名),它既可以被赋值,也能被取地址;而像1这种字面量属于右值,本质只是一个临时的数值,没有绑定到固定的内存位置。
  • 你误以为字面量会存在栈上,但编译器完全可以优化掉这个存储操作——比如调用foo时直接把1放到寄存器里传递,根本不会在栈上分配空间;就算某些场景下字面量会被存入全局常量区,C标准也不允许对这类右值使用&取地址。
  • 如果不想显式定义变量,可用C99支持的复合字面量实现需求:foo(&(int){1});,复合字面量属于左值,会生成临时的int对象,允许取地址传递。

内容的提问来源于stack exchange,提问作者Ertugrul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:39:56