<分区>
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 吗?
<分区>
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/