分配:
ptr = var
存储在指针ptr
即阵列,这是同样的事情数组的第一元素的地址的地址的var,
地址。究其原因是因为内存是通过以下方式进行组织:
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ ...
| 10 | 100 | 200 | values of other variables, including i, ptr, etc.
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ ...
^ ^ ^
| | |
var[0] var[1] var[2]
^
|
var
的算子的&variable
用C得到variable
地址。换句话说,分配
ptr = var
是相同的:
ptr = &var[0]
以相同的方式,分配:
ptr = &var[MAX-1]
分配给指针最后元素的地址(其索引为MAX-1
,即2)。
在循环的每次迭代中,由指针指向的变量的值被印刷,并且的ptr
值递减在第二回路(注意在第一实施例中使用的ptr--
代替ptr++
),从而数组的值从最后一个打印到第一个。
'ptr'是指向'var'的最后一个(MAX-1')元素的指针。它没有订单。如果你从它向后移动到数组的开头,你将以相反的顺序在数组中移动。 – Ryan
本教程非常笨拙,但您似乎已经掌握了对指针的很好理解。语法'ptr =&var [MAX-1];'初始化'ptr'指向数组中的最后一个元素。在循环中递减'ptr'可以让您按照* reverse *顺序枚举数组元素,但是数组本身不会改变。 – chqrlie
只是为了说清楚:对于'ptr = var',你不会**将'ptr'设置为数组的地址,而是设置为第一个元素的地址,因为对于大多数用法,数组名称是隐式转换的(衰减)到指向其第一个元素的指针。这可能听起来有点挑剔,因为大多数实现都具有相同的**值**。但他们有不同的类型。数组的地址始终是'&var'。尝试'ptr =&var',你会得到一个类型错误的错误,除非你定义了int(* ptr)[];'。 – Olaf