开发者社区> 问答> 正文

那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ?

那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ?

展开
收起
游客py5kcp7dd6tu6 2022-03-29 01:09:24 446 0
1 条回答
写回答
取消 提交回答
  • 在 C 语言中对数组和指针的困惑多数都来自这句话。说数组和指针 ``等价" 不表示它们相同, 甚至也不能互换。它的意思是说数组和指针的算法定义 可以用指针方便的访问数组或者模拟数组。 特别地, 等价的基础来自这个关键定义:

    一个 T 的数组类型的左值如果出现在表达式中会蜕变为一个指向数组第一个 成员的指针(除了三种例外情况); 结果指针的类型是 T 的指针。 这就是说, 一旦数组出现在表达式中, 编译器会隐式地生成一个指向数组第 一个成员地指针, 就像程序员写出了 &a[0] 一样。例外的情况是, 数组为 sizeof 或 & 操作符的操作数, 或者为字符数组的字符串初始值。

    作为这个这个定义的后果, 编译器并那么不严格区分数组下标操作符和指针。 在形如 a[i] 的表达式中, 根据上边的规则, 数组蜕化为指针然后按照指针变 量的方式如 p[i] 那样寻址, 如问题 6.2 所述, 尽管最终的内存访问 并不一样。 如果你把数组地址赋给指针:

    p = a;
    

    那么 p[3] 和 a[3] 将会访问同样的成员。

    2022-03-29 01:09:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载