通过指针访问数组

use*_*167 0 c c++ pointers

int * ptr,array[10]; ptr= array;.现在阵列的连续位置中的每个存储器单元具有固定的大小.如果第一个单元的地址是1234,那么下一个单元必须是1238地址.但我们使用指针作为访问它*(ptr+1).我很困惑.任何来源或答案?谢谢.

Mge*_*etz 5

根据C11 标准: §6.5.2.1

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

EG你正在做什么基本上是[]已经做的

另外(相同的标准)解释了为什么指针会在你注意到的时候递增:§6.5.6

当一个具有整数类型的表达式被添加到指针或从指针中减去时,结果具有指针操作数的类型.如果指针操作数指向数组对象的元素,并且数组足够大,则结果指向偏离原始元素的元素,使得结果元素和原始数组元素的下标的差异等于整数表达式.换句话说,如果表达式P指向数组对象的第i个元素,则表达式(P)+ N(等效地,N +(P))和(P)-N(其中N具有值n)指向分别为数组对象的第i + n和第i-n个元素,只要它们存在.此外,如果表达式P指向数组对象的最后一个元素,则表达式(P)+1指向一个超过数组对象的最后一个元素,如果表达式Q指向一个超过数组对象的最后一个元素,表达式(Q)-1指向数组对象的最后一个元素.如果指针操作数和结果都指向同一个数组对象的元素,或者指向数组对象的最后一个元素,则评估不应产生溢出; 否则,行为未定.如果结果指向数组对象的最后一个元素之后,则不应将其用作已计算的一元*运算符的操作数.