c - 指针运算 (char*) &a[1] - (char *)&a[0] == 4

标签 c pointers casting

如果 a 是一个 int 数组,(char*) &a[1] - (char *)&a[0] 等于 4,而 &a[1] - &a[ 0] 等于 1。这是为什么?

最佳答案

指针数学对其指向的数据结构的大小进行运算。这是因为如果我这样做:

int array[10] ;
int * p = array ;

p ++ ;

我希望 p 指向第二个 int,而不是两个元素之间的一些内存。

所以 &a[1]&a[0] 相距四个字节,但要求它 &a[1] - &a[0]询问相隔多少个int。当您将其转换为 char 时,您需要根据 char 的大小进行数学运算。

关于c - 指针运算 (char*) &a[1] - (char *)&a[0] == 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20486661/

相关文章:

c - x86 硬件中断不适用于 qemu

c - C 中的指针和字符串

c++ - 是否可以重载 *static_cast* 运算符?

sql - 如何在 Firebird 中四舍五入一个数字?

c - 检测宏是否无效

javascript - XMLHttpRequest 和 C CGI...谁只发回一个字

c - g_tree_lookup 中的段错误

c++ - if 语句中的函数名以一种奇怪的方式转换

c - 错误 MSB3073 : The command "staticdv.exe/devenv/check" exited with code -1

c++ - 指针映射的数组下标运算符