14

我正在尝试将地址的值存储在非指针 int 变量中,当我尝试对其进行转换时,我得到编译错误“从'int *'到'int'的无效转换”这是我正在使用的代码:

#include <cstdlib>
#include <iostream>
#include <vector>

using namespace std;

vector<int> test;

int main() {
    int *ip;
    int pointervalue = 50;
    int thatvalue = 1;

    ip = &pointervalue;
    thatvalue = ip;

    cout << ip << endl;

    test.push_back(thatvalue);

    cout << test[0] << endl;
    return 0;
}
4

6 回答 6

26

int可能不够大,无法存储指针。

你应该使用intptr_t. 这是一个显式大到足以容纳任何指针的整数类型。

    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).
于 2012-12-30T19:33:16.453 回答
8

你可以这样做:

int a_variable = 0;

int* ptr = &a_variable;

size_t ptrValue = reinterpret_cast<size_t>(ptr);
于 2012-12-30T17:17:37.257 回答
4

你为什么要这样做,无论如何你只需要转换,对于 C 代码:

thatvalue = (int)ip;

如果您编写 C++ 代码,最好使用reinterpret_cast

于 2012-12-30T17:17:06.710 回答
4

我建议使用reinterpret_cast

thatvalue = reinterpret_cast<intptr_t>(ip);
于 2012-12-30T17:17:37.977 回答
0

我能够使用 C union 语句来实现您想要的。它当然取决于编译器,但它对我有用,就像你认为它应该的那样(Linux,g++)。

union {
    int i;
    void *p;
} mix;

mix.p = ip;
cout << mix.i << endl;

在我的特定实例中,我的 int 是 32 位,指针是 48 位。分配指针时,整数值 i 将代表指针的最低 32 位。

于 2021-02-01T21:57:03.277 回答
0

由于int *ip;是一个指向整数的指针并且int thatvalue = 1;是一个整数,假设您希望将值存储在assigned to指向 的地址处,更改为(注意添加解引用运算符以访问与指针地址处的值等效的值) .ipthatvaluethatvalue = ip;thatvalue = *ip; *

于 2021-07-04T20:08:50.243 回答