首页 > 解决方案 > 引用自身的 C++ 指针不产生预期的输出

问题描述

我正在使用 C++ 指针,我遇到了一些奇怪的事情。如果我使用“b = (int*)&b;”重置指向自身的指针,我希望延迟输出是自身的内存地址——因为它指向自身。

所以我认为 *b 会是“0x7ffea00819b0”,但这是一些奇怪的数值。

但事实并非如此。我得到的替代值令人困惑。

这是我的输出:

Value of a = 10
Address of a = 0x7ffea00819ac

Value of b = 0x7ffea00819b0
Address of b = 0x7ffea00819b0
Dereference of b = -1610081872


#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    int a = 10;

    int *b = &a;

    b = (int*)&b;

    cout << "Value of a = " << a << endl;
    cout << "Address of a = " << &a << endl << endl;

    cout << "Value of b = " << b << endl;
    cout << "Address of b = " << &b << endl;
    cout << "Dereference of b = " << *b << endl;
}

标签: c++

解决方案


将类型更改为 unsigned long int 解决了该问题。谢谢你们!

#include <iostream>
#include <type_traits>
using namespace std;
        
    int main(int argc, char** argv)
    {
        unsigned long int a = 10;
    
        unsigned long int *b = &a;
    
        b = (unsigned long int*)&b;
    
        cout << "Value of a = " << a << endl;
        cout << "Address of a = " << &a << endl << endl;
    
        cout << sizeof b << endl;
        cout << sizeof *b << endl;
    
        //static_assert(sizeof b == sizeof *b);
    
        cout << "Value of b = " << b << endl;
        cout << "Address of b = " << &b << endl;
        cout << "Dereference of b = " << hex << "0x" << *b << endl;
    }

推荐阅读