2017-07-20 46 views
0

*变量[0]和变量[0] [0]是同一个东西吗? 第一个是指向数组的第一个元素的指针。第二个是指向数组的第一个元素的数组的第一个元素。他们是否指向相同的元素?指针数组说明

+0

[ Arrays C++ Tutorails](http://www.cplusplus.com/doc/tutorial/arrays/) – FortyTwo

+0

'x [y]'被解释为'*(x + y)',所以是的,它们将是相同的东西 – Fureeish

+1

这将是ab etter问题,如果你说什么'变量'是。 –

回答

3

按照C标准(6.5.2.1数组下标)

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

和(6.3.2.1左值,数组和功能指示器)

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

该表达

variable[0] 

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

*variable[0]根据第一引用的表达式相当于variable[0][0]

在另一方面

variable[0][0]等效于表达*(variable[0] + 0),这又相当于*(variable[0])或只是*variable[0]