在 C 中调用指针时 [] 做什么?

问题描述 投票:0回答:2

在 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。对吗?

问候并感谢您的任何回答

c pointers pointer-arithmetic
2个回答
0
投票

是的,这正是它的处理方式,因此您可以轻松地将指针用作指针指向的任何类型的数组


0
投票

应用于指针

pointer[index]
它完全等同于(所以语法糖)
*(pointer + index)

指向的类型在这方面是无关紧要的——除了以字节为单位的距离不同(

&charPtr[1] - &charPtr[0]
——总是1,而
int
指针的类似差异是
sizeof(int)
——通常,但不一定是4)。相邻元素的数组单位距离(即指向类型)保持为 1。

实际上,您甚至根本不需要数组的显式索引运算符;将指针索引运算符应用于数组会导致数组衰减为指针。如果 C 标准确实依赖于或仍然单独定义数组索引运算符,我(目前)不知道,但是......

旁注/有趣的事实:

上面的等价导致等价于

*(index + pointer)
,最后等价于
index[pointer]
,使得看起来很奇怪的
7[pointer /* or array*/]
有效代码做同样的事情...

© www.soinside.com 2019 - 2024. All rights reserved.