理解指针变量增量
Understanding pointer variable increment
在阅读有关指针的内容时,我发现指针变量用于指示这样的数组:
char* chrArray;
int* intArray;
之后我发现代码中使用了charArray++
和intArray++
来表示charArray
和intArray
的下一个元素。但到目前为止,我知道 C 中的 char
是 1 个字节,数组中的 int
是 4 个字节。所以我无法理解增量运算符在这里的行为方式。谁能解释一下。
这是由知道指针类型的编译器处理的,因此可以将它存储的地址增加相关大小,无论它是 char、int 还是任何其他类型。
根据 C11
标准文档第 6.5.2.5 章,后缀递增和递减运算符
The result of the postfix ++ operator is the value of the operand. As a side effect, the
value of the operand object is incremented (that is, the value 1 of the appropriate type is
added to it).
因此,无论何时使用后缀递增运算符,都不会添加任何特定值,而是添加值 1 使用运算符的操作数的类型。
现在举个例子,
chrArray
是类型 char *
。因此,如果我们执行 chrArray++
,char
[sizeof(char)
类型的值,即 1
] 将作为结果添加到 chrArray
。
OTOH,intArray
是 int *
类型。所以,如果我们做 intArray++
,int
[sizeof(int)
类型的值,在 32 位平台上是 4
,可能会有所不同] 将被添加到 intArray
作为结果。
基本上,任何类型的指针变量上的后缀增量运算符都指向该类型的下一个元素(提供的有效访问)。
在阅读有关指针的内容时,我发现指针变量用于指示这样的数组:
char* chrArray;
int* intArray;
之后我发现代码中使用了charArray++
和intArray++
来表示charArray
和intArray
的下一个元素。但到目前为止,我知道 C 中的 char
是 1 个字节,数组中的 int
是 4 个字节。所以我无法理解增量运算符在这里的行为方式。谁能解释一下。
这是由知道指针类型的编译器处理的,因此可以将它存储的地址增加相关大小,无论它是 char、int 还是任何其他类型。
根据 C11
标准文档第 6.5.2.5 章,后缀递增和递减运算符
The result of the postfix ++ operator is the value of the operand. As a side effect, the value of the operand object is incremented (that is, the value 1 of the appropriate type is added to it).
因此,无论何时使用后缀递增运算符,都不会添加任何特定值,而是添加值 1 使用运算符的操作数的类型。
现在举个例子,
chrArray
是类型char *
。因此,如果我们执行chrArray++
,char
[sizeof(char)
类型的值,即1
] 将作为结果添加到chrArray
。OTOH,
intArray
是int *
类型。所以,如果我们做intArray++
,int
[sizeof(int)
类型的值,在 32 位平台上是4
,可能会有所不同] 将被添加到intArray
作为结果。
基本上,任何类型的指针变量上的后缀增量运算符都指向该类型的下一个元素(提供的有效访问)。