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

为何数组中x+i=i赋值报错?*(x+i)与x+i赋值区别解析

问题解答

核心原因:赋值的左值必须是可修改的内存位置

C语言里,赋值语句左边的内容(左值)得是能被修改的内存实体——比如变量、数组元素、解引用后的指针。而x+i是个指针算术表达式,算出来的是一个临时的地址值,属于右值,只能被读取,不能被赋值。就像你不能写5=3一样,临时值没法作为左值接受赋值操作。

为什么*(x+i)能正常运行

x[i] = 2等价于*(x+i) = 2,这里的*(x+i)是对x+i这个地址做解引用操作,它代表的是该地址指向的内存空间,这是一个可修改的左值,所以可以接受赋值。直白点说:

  • x+i:只是计算出一个地址(比如0x1234),你不能把i的值塞给这个地址本身,地址是内存的固定标识,没法被修改。
  • *(x+i):指的是这个地址对应的内存单元,你可以修改这个单元里存储的数据。

你的代码问题拆解

你写的x+i = i,本质是试图把i的值赋给一个临时计算出来的地址,这违反了C语言的赋值规则,编译器自然会报错。改成*(x+i) = i后,是把i的值写入到x+i指向的内存单元里,完全符合语法规则,所以能正常运行。

另外提醒下:你的循环条件i<11会导致数组越界,数组x只有10个元素(下标范围是0到9),当i=10时会访问超出数组范围的内存,可能导致程序崩溃或出现异常行为,建议改成i<10。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:16