为什么增加指针的整数值时会得到一个随机数?

问题描述 投票:0回答:7

我是一位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)。这个数字是多少是同一过程使用的另一个数字吗?是否可能来自其他过程?这是不好的做法,还是不允许的?如果没有,有没有用?有点酷。

我是一位C#专家,但是我对C ++还是很陌生。我对指针的基本想法很好,但是我一直在玩。您可以通过将指针转换为int来获得指针的实际整数值:...

c++ pointers int memory-address
7个回答
4
投票

这个数字是多少?是同一过程使用的另一个数字吗?是否可能来自其他过程?


0
投票

您超出i指针4或8个字节,并打印出该数字,该数字可能是存储在程序空间中的另一个数字。该值是未知的,这是未定义行为。另外,您很有可能会遇到错误(这意味着您的程序可能会崩溃)[您听说过SIGSEGV吗?细分违规问题]


0
投票

您定义一个整数依据


0
投票

使用指针指向随机地址是非常危险的。除非您知道自己在做什么,否则请勿指向地址。您可以覆盖它的内容,也可以尝试修改常量以导致不确定的行为...


0
投票

您发现内存中的随机位置包含“未知”数据。不仅如此,而且您可能会发现自己指向的内存是您的进程没有“权利”的,因此即使读取地址内容的行为也可能导致分段错误。


0
投票

这不是“随机”。这只是意味着下一个地址上有一些数据。


0
投票
int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
int* jptr = (int*)((int)iptr + 1);
int j = (int)*iptr;
© www.soinside.com 2019 - 2024. All rights reserved.