指针数组澄清

时间:2017-07-20 22:20:29

标签: c++ c arrays pointers

* variable [0]和变量[0] [0]是一样的吗? 第一个是指向数组第一个元素的指针。第二个是数组的第一个元素,由尖头数组的第一个元素指向。他们是否指向同一个元素?

1 个答案:

答案 0 :(得分:3)

根据C标准(6.5.2.1阵列下标)

  

2后缀表达式后跟方括号[]中的表达式   是数组对象元素的下标。的的   下标运算符[]的定义是E1 [E2]与...相同   (*((E1)+(E2)))。由于适用于的转换规则   binary +运算符,如果E1是数组对象(等效于指针   到数组对象的初始元素),E2是一个整数,   E1 [E2]表示E1的第E2个元素(从零开始计数)。

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

  

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

此表达式

variable[0]

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

*variable[0]相当于variable[0][0]

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

variable[0][0]相当于表达式*( variable[0] + 0 ),而{@ 1}}相当于*( variable[0] )或仅*variable[0]