gpt4 book ai didi

c++ - 为什么在增加指针的整数值时得到一个随机数?

转载 作者:太空宇宙 更新时间:2023-11-04 16:17:43 25 4
gpt4 key购买 nike

我是一名 C# 程序员专家,但我对 C++ 还很陌生。我很好地理解了指针的基本概念,但我只是在玩弄它。您可以通过将指针转换为 int 来获取指针的实际整数值:

int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;

这是有道理的;这是一个内存地址。但我可以移动到下一个指针,并将其转换为 int:

int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
int* jptr = (int*)((int)iptr + 1);
int j = (int)*iptr;

我得到了一个看似随机的数字(尽管这不是一个好的 PSRG)。这个数字是多少?它是同一进程使用的另一个号码吗?它可能来自不同的过程吗?这是不好的做法,还是不允许的?如果没有,这有什么用吗?这有点酷。

最佳答案

What is this number? Is it another number used by the same process? Is it possibly from a different process?

您通常不能将指针强制转换为整数并返回并期望它们是可取消引用的。整数是数字。指针就是指针。它们是完全不同的抽象并且不兼容。

如果整数不够大,无法存储指针的内部表示(很可能是这种情况;整数通常为 32 位长,指针通常为 64 位长),或者如果您在转换前修改了整数回到一个指针,你的程序展示undefined behaviour因此任何事情都有可能发生。

参见 C++: Is it safe to cast pointer to int and later back to pointer again?

Is this bad practice, or disallowed?

不允许?不。
不好的做法?糟糕的做法。

关于c++ - 为什么在增加指针的整数值时得到一个随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736493/

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