如何将int *转换为int

时间:2010-04-23 14:54:48

标签: c++ pointers

如果指向int,我如何获得实际的int

我不知道这是否可能,但有人可以告诉我吗?

7 个答案:

答案 0 :(得分:40)

使用* on指针获取指向的变量(解除引用)。

int val = 42;
int* pVal = &val;

int k = *pVal; // k == 42

如果你的指针指向一个数组,那么解除引用将为你提供数组的第一个元素。

如果你想要指针的“值”,即指针所包含的实际内存地址,那么就把它投出来(但这通常不是一个好主意):

int pValValue = reinterpret_cast<int>( pVal );

答案 1 :(得分:8)

如果需要获取指针指向的值,那么这不是转换。您只需取消引用指针并提取数据:

int* p = get_int_ptr();
int val = *p;

但是如果确实需要将指针转换为int,那么你需要强制转换。如果您认为这是您想要的,请再想一想。可能不是。如果您编写了需要此构造的代码,那么您需要考虑重新设计,因为这显然是不安全的。尽管如此:

int* p = get_int_ptr();
int val = reinterpret_cast<int>(p);

答案 2 :(得分:5)

如果我明白你的意思,我不能100%确定:

int a=5;         // a holds 5
int* ptr_a = &a; // pointing to variable a (that is holding 5)
int b = *ptr_a;  // means: declare an int b and set b's 
                 // value to the value that is held by the cell ptr_a points to
int ptr_v = (int)ptr_a; // means: take the contents of ptr_a (i.e. an adress) and
                        // interpret it as an integer

希望这有帮助。

答案 3 :(得分:4)

使用解除引用运算符*例如

void do_something(int *j) {
    int k = *j; //assign the value j is pointing to , to k
    ...
}

答案 4 :(得分:2)

你应该严格区分你想要的东西:施法或取消引用?

  int x = 5;
  int* p = &x;    // pointer points to a location.
  int a = *p;     // dereference, a == 5
  int b = (int)p; //cast, b == ...some big number, which is the memory location where x is stored.

你仍然可以直接将int分配给指针,除非你真的知道你正在做什么,否则不要取消引用它。

  int* p = (int*) 5;
  int a = *p;      // crash/segfault, you are not authorized to read that mem location.
  int b = (int)p;  // now b==5

您可以不使用显式强制转换(int)(int*),但您很可能会收到编译器警告。

答案 5 :(得分:1)

使用*取消引用指针:

int* pointer = ...//initialize the pointer with a valid address
int value = *pointer; //either read the value at that address
*pointer = value;//or write the new value

答案 6 :(得分:-1)

int Array[10];

int *ptr6 = &Array[6];
int *ptr0 = &Array[0];

uintptr_t int_adress_6  = reinterpret_cast<uintptr_t> (ptr6);
uintptr_t int_adress_0  = reinterpret_cast<uintptr_t> (ptr0);

cout << "difference of casted addrs  = " << int_adress_6 - int_adress_0 << endl;  //24 bits

cout << "difference in integer = " << ptr6 - ptr0 << endl; //6