gpt4 book ai didi

c++指向整数的指针在减去时给出不同的答案

转载 作者:行者123 更新时间:2023-11-27 22:41:28 25 4
gpt4 key购买 nike

#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 ,减去两个不指向同一个数组对象的指针也是如此。您可以通过创建一个数组并为 ab 分配其中两个元素的地址来以一致的方式执行此操作:

int array[60];
int *a = &array[2];
int *b = &array[50];

关于c++指向整数的指针在减去时给出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com