c - 算术运算符如何处理 c 中的地址?

标签 c pointers

<分区>

int main(void){
   int arr[] = {1, 2, 3, 4, 5, 6};
   printf("%p\t%p\t%d\n",arr,arr+1,(arr+1)-arr);
   return 0;
 }

输出:

  0x7ffe583f4ba0    0x7ffe583f4ba4  1

为什么差值是1?不应该是 4 吗?

最佳答案

将此表达式 (arr+1)-arr 视为

0x7ffe583f4ba0 + 1 - 0x7ffe583f4ba0

它将给出 1

当您减去指向同一个数组的两个指针时,它会给出这些指针之间的元素数。
按照相同的逻辑,如果将指向 int 数组的指针增加 1,那么它将指向它的下一个元素(一个单元)而不是下一个 sizeof(int)元素。

关于c - 算术运算符如何处理 c 中的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078796/

相关文章:

c - 当数组在c中隐式转换为指针时

ios - time.h函数看不到头文件

c - 二进制 % 的操作数无效?

C - 使用 select() 创建 UTP 服务器/客户端聊天室

c - int *ptr = (int*)(&a + 1);

c++ - 在 C++ 程序中使用 Cheat Engine 基地址

c - 解释 qsort 库中使用的函数的 typedef

c++ - 数组的 Lambda 捕获(按值)只是复制指针?

android - 如何通过 C/C++ 从 Linux 命令获取输出?适合安卓吗?

c++ - 将变量中的值取消引用为指针地址