* variable [0]和变量[0] [0]是一样的吗? 第一个是指向数组第一个元素的指针。第二个是数组的第一个元素,由尖头数组的第一个元素指向。他们是否指向同一个元素?
答案 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]