指针将地址存储在堆中或堆栈中。经过一番搜索,我试图理解什么是“地址”。我发现它只是映射内存区域的整数值。
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int a = 1024;
int* ptrA = &a;
cout << "ptrA: " << ptrA << endl; // 0018FF44
cout << "*ptrA: " << *ptrA << endl; // 1024
cout << "&a: " << &a << endl; // 0018FF44
cout << "a: " << a << endl; // 1024
// int b = ptrA; // why this is incorrect
int b = (int)ptrA; // why I need this?
cout << "b: " << std::hex << b << endl; // 18FF44
// so b is identic to ptrA!
std::cout << std::endl;
return 0;
}
最佳答案
有两个主要原因。
int
可能不足以存储指针值。这是特定于实现的细节。在具有64位内存地址(其中int
只有32位)的64位平台上找到C++实现仍然很常见。