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

C语言指针寻址相关问题:数组名赋值与复合运算符疑问

问题1解答

C语言中存在数组名隐式退化的规则:除了作为sizeof、&运算符的操作数,以及用于初始化字符数组的字符串字面量这三类场景外,数组名会自动转换为指向数组首元素的指针。
你给出的代码里直接使用strA时,它会自动退化为&strA[0],类型是char *,和pA的类型完全匹配,因此pA = strA就是把首元素地址赋值给指针的正确写法。
而你提到的&strA是整个数组的地址,类型是char (*)[80](指向长度为80的char数组的指针),和char *类型不兼容,直接赋值会触发编译告警甚至报错。二者的步长也完全不同:strA + 1的地址会偏移1字节(一个char的长度),而&strA + 1的地址会偏移80字节(整个数组的长度)。

问题2解答

这个表达式的运算逻辑由C语言的运算符优先级和结合性决定:

  • 前缀自增运算符++和间接寻址运算符*优先级相同,结合性为从右到左
    因此c = * ++ p;等价于c = *(++p);,执行顺序为:
  1. 先对p存储的地址值执行自增,让p指向当前地址的下一个同类型元素
  2. 对自增后的p执行间接寻址,取出对应地址的值赋值给c
    如果要实现对p指向的变量值自增,写法应该是c = ++(*p);即c = ++*p;。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:24:05