如果指向int
,我如何获得实际的int
?
我不知道这是否可能,但有人可以告诉我吗?
答案 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