指针数组说明

Pointer Array Clarification

本文关键字:说明 数组 指针      更新时间:2023-10-16

*变量[0]和变量[0][0]是一回事吗? 第一个是指向数组第一个元素的指针。第二个是数组的第一个元素,它由指向数组的第一个元素指向。它们是否指向相同的元素?

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

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

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

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

此表达式

variable[0]

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

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

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

variable[0][0]等效于表达式*( variable[0] + 0 ),而表达式又等效于*( variable[0] )或只是*variable[0]