请解释有关此过程的错误,以找到最大的指针

use*_*528 0 c++

最高指针不是通过指针算术不能递增的指针吗?

#include <iostream>

int main() 
{
    // Find the largest pointer
    int x = 0;
    int* px = &x;
    while ((px+1) != px)
      ++px;
    std::cout << "The largest pointer is: " << px;

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

产量

Timeout
Run Code Online (Sandbox Code Playgroud)

jro*_*rok 7

如前所述,你有一个无限循环,因为条件永远不会false.

话虽这么说,你正在做的是未定义的行为,非法的C++.指针算法只适用于指向同一数组的指针(并且单个对象被视为一个元素的数组)并且正好超过它的末尾.即使您修复了循环,也不能指望程序的合理结果.

我怀疑它的值是指针的理论最大值(转换为整数),但它可能不适合你的程序.有些东西需要考虑虚拟地址空间分段内存模型.无论如何,指针的确切值(除了)不是你应该关注的东西.您可以通过获取现有对象的地址或通过调用分配函数来获取指针.std::numeric_limits<uintptr_t>::max()nullptr

NB我认为你有一种误解,试图增加超出其最大值的整数类型将不会做任何事情.这是不正确的 - 无符号整数将回绕到0并且使用有符号整数再次获得未定义的行为(请参阅有符号整数溢出).

希望有所帮助.