#include <iostream>
using namespace std;
int main() {
int* a = (int*)50;//printf("%d",a)-gives 50
int* b = (int*)2;//printf("%d",b)-gives 2
printf("%d",a-b);//12 is answer, but shouldnt it be 50-2=48
return 0;
}
我想知道为什么答案是 12,因为它可以是 50-2=48,也可以是 5-2=3。
最佳答案
指针算法在了解底层类型的情况下进行运算。当您向指针添加一个值时,您添加的是底层类型的元素的数量,而不是字节的数量。类似地,对于两个指针的减法,区别在于元素的数量,而不是字节数。
您的指针是 int *
类型。根据您的输出,似乎 int
的长度为 4 个字节。因此,这种类型的两个值相差 48 的指针实际上相差 48/4 = 12 int
。这就是减法的结果。
顺便说一句,将特定数值分配给指针会调用 undefined behavior ,减去两个不指向同一个数组对象的指针也是如此。您可以通过创建一个数组并为 a
和 b
分配其中两个元素的地址来以一致的方式执行此操作:
int array[60];
int *a = &array[2];
int *b = &array[50];
关于c++指向整数的指针在减去时给出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649192/