How do I cast a pointer to an int

后端 未结 5 2131
一向
一向 2021-02-13 21:54

I\'m trying to store the value of an address in a non pointer int variable, when I try to convert it I get the compile error \"invalid conversion from \'int*\' to \'int\'\" this

相关标签:
5条回答
  • 2021-02-13 22:39

    Why are you trying to do that, anyway you just need to cast, for C code :

    thatvalue = (int)ip;
    

    If your writing C++ code, it is better to use reinterpret_cast

    0 讨论(0)
  • 2021-02-13 22:42

    I'd suggest using reinterpret_cast:

    thatvalue = reinterpret_cast<intptr_t>(ip);
    
    0 讨论(0)
  • 2021-02-13 22:50

    You can do this:

    int a_variable = 0;
    
    int* ptr = &a_variable;
    
    size_t ptrValue = reinterpret_cast<size_t>(ptr);
    
    0 讨论(0)
  • 2021-02-13 22:57

    I was able to use the C union statement to achieve what you were looking for. It will of course be compiler dependent, but it worked for me like you would presume it should (Linux, g++).

    union {
        int i;
        void *p;
    } mix;
    
    mix.p = ip;
    cout << mix.i << endl;
    

    On my particular instance my int is 32 bit and the pointer is 48 bit. When assigning the pointer, the integer value i will represent the lowest 32 bit of the pointer.

    0 讨论(0)
  • 2021-02-13 22:59

    int may not be large enough to store a pointer.

    You should be using intptr_t. This is an integer type that is explicitly large enough to hold any pointer.

        intptr_t thatvalue = 1;
    
        // stuff
    
        thatvalue = reinterpret_cast<intptr_t>(ip);
                    // Convert it as a bit pattern.
                    // It is valid and converting it back to a pointer is also OK
                    // But if you modify it all bets are off (you need to be very careful).
    
    0 讨论(0)
提交回复
热议问题