int *pt; pt = 0xB8000000; // type mismatch pt = (int *) 0xB8000000; // types now match cout << pt << endl; // 输出 0xB8000000
C++
不能直接赋值地址,需要通过强制类型转换,将数字转换为适当的地址类型
空指针
与野指针对应的就是
空指针,表示不指向任何有效的内存地址
1 2 3 4 5
// 空指针 int *p1 = nullptr; // C++ 一般用这个 int *p2 = 0; // must #include cstdlib,NULL 在头文件中被定义为 0 int *p3 = NULL; // C 语言空指针,is equivalent to initializing it to 0
void 指针
没有具体的指向类型,可以用来存储任何类型的指针,并且可以在需要时转换为其他指针类型
1 2 3
double obj = 3.14;
void *pv = &obj;
void 指针不能解引用
引用
& 一般表示变量的地址,但 C++
赋予了另一个含义,用来声明引用
引用是已定义变量的别名
1 2
int rats; int &rodents = rates;
引用变量 rodents 和变量 rates
指向相同的值和内存单元
引用变量在创建时必须初始化,而且一旦和某个变量关联就不能进行修改
1 2 3 4 5 6 7 8 9 10 11
// pt 改为指向 bunnies,但是 rodents 引用的还是 rats int rats = 75; int *pt = &rats; int &rodents = *pt; int bunnies = 75; pt = &bunnies;
int p0 = 0; int p1 = 1; int &p2 = p0; p2 = p1; // 此时不是将 p2 绑定到 p1,而是 p0 的值修改成了 p1 的值