在 int* 指针上调用时 [] 做什么?
例如在这段代码中:
int* someIntPointer = 4000; //pointer points to byte 4000 in memory
++someIntPointer; //pointer points to byte 4004 in memory
someIntPointer[5]; //What memory spot does someIntPointer point to now?
在调用 char* 时会有所不同吗?
在我看来,在指针上调用例如 [5] 会使指针递增 5,因此它指向更高的内存点(5 * 数据类型的字节大小),例如20 (5*4) 用于 int_32。对吗?
问候并感谢您的任何回答
是的,这正是它的处理方式,因此您可以轻松地将指针用作指针指向的任何类型的数组
应用于指针
pointer[index]
它完全等同于(所以语法糖)*(pointer + index)
指向的类型在这方面是无关紧要的——除了以字节为单位的距离不同(
&charPtr[1] - &charPtr[0]
——总是1,而int
指针的类似差异是sizeof(int)
——通常,但不一定是4)。相邻元素的数组单位距离(即指向类型)保持为 1。
实际上,您甚至根本不需要数组的显式索引运算符;将指针索引运算符应用于数组会导致数组衰减为指针。如果 C 标准确实依赖于或仍然单独定义数组索引运算符,我(目前)不知道,但是......
旁注/有趣的事实:
上面的等价导致等价于
*(index + pointer)
,最后等价于index[pointer]
,使得看起来很奇怪的7[pointer /* or array*/]
有效代码做同样的事情...