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

&(str[i])与(&str)[i]的区别及性能优劣对比

&(str[i]) 和 (&str)[i] 的区别与性能对比

核心区别

两者本质完全不同,其中(&str)[i]是不符合你需求的错误写法:

  • &(str[i]):
    C语言中str[i]等价于*(str + i)(数组下标运算符[]的本质就是指针偏移后解引用)。对其取地址&*(str + i)会被编译器直接优化为str + i,最终得到的是从str起始位置偏移i个char长度的内存地址,这正是你需要的子串str[i...]的起始指针,完全符合传递子串的需求。
  • (&str)[i]:
    &str的类型是const char**(指向char指针的指针)。(&str)[i]等价于*(&str + i),也就是把存储str这个指针变量的地址,偏移i个const char*的长度(32位系统为4字节,64位为8字节)后再解引用。这个操作得到的指针指向的是完全不确定的内存区域(可能是栈上其他变量或无效内存),不仅无法得到你想要的子串起始地址,还会引发未定义行为(比如程序崩溃、数据乱码)。

性能对比

  • &(str[i])会被编译器优化为单一的地址加法操作,几乎没有任何开销,是高效且正确的写法。
  • (&str)[i]本身是逻辑错误的写法,即便忽略错误,它的操作包含指针的指针偏移和解引用两步,步骤比前者多,但更关键的是它完全无法实现你的需求,不存在“速度优势”的讨论价值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:47:04