指针在堆上或堆栈上存储地址.经过一番搜索,我试图了解什么是"地址"; 我发现它只是一个映射内存区域的整数值.
我想知道:只要一个地址只是一个整数,为什么我不能将它分配给一个整数变量:
#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;
}
Run Code Online (Sandbox Code Playgroud)主要原因有两个.
一个int可能不是大到足以存储一个指针值.这是一个特定于实现的细节.在64位平台上找到C++实现仍然很常见,它具有64位内存地址,其中a int只有32位.
类型安全.编译器存在不同类型的原因之一是捕获明显的错误,例如在指向不同类的指针时使用指向一个类的指针.如果对于每个对象的所有指针都只是简单的整数,那么这些错误将被解读.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |