【问题标题】:Pointer Array Clarification指针数组说明
【发布时间】:2017-07-20 22:20:29
【问题描述】:

*variable[0] 和 variable[0][0] 是同一个东西吗? 第一个是指向数组第一个元素的指针。第二个是数组的第一个元素,由指向数组的第一个元素指向。它们指向同一个元素吗?

【问题讨论】:

  • x[y] 被解释为*(x + y),所以是的,它们是一样的
  • 如果您说出variable 是什么,这将是一个更好的问题。
  • 只要variable[0] 的类型不超载operator []operator *,就可以。
  • 不确定“第二个是数组的第一个元素,它由指向数组的第一个元素指向。”是什么意思?

标签: c++ c arrays pointers


【解决方案1】:

根据 C 标准(6.5.2.1 数组下标)

2 后缀表达式后跟方括号 [] 中的表达式 是数组对象元素的下标名称。 该 下标运算符 [] 的定义是 E1[E2] 等同于 (*((E1)+(E2)))。 因为适用于 二进制 + 运算符,如果 E1 是一个数组对象(相当于一个指针 到数组对象的初始元素)并且 E2 是一个整数, E1[E2] 表示 E1 的第 E2 个元素(从零开始计数)。

And(6.3.2.1 左值、数组和函数指示符)

3 除非它是 sizeof 运算符的操作数或一元 & 运算符,或者是用于初始化数组的字符串文字,an 具有“类型数组”类型的表达式被转换为 类型为“类型指针”的表达式,指向初始 数组对象的元素 并且不是左值。如果数组对象 有注册存储类,行为未定义。

这个表达式

variable[0]

产生一个数组。将一元运算符* 应用于它,数组将转换为指向其第一个元素的指针。所以

*variable[0] 等价于variable[0][0]

另一方面根据第一个引用的表达式

variable[0][0] 等价于表达式*( variable[0] + 0 ) 反过来又等价于*( variable[0] ) 或只是*variable[0]

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 2016-06-09
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    相关资源
    最近更新 更多