本文意在整理 C++ 指针的用法,和需要注意的地方。见下面代码:
|
|
指针定义
int i = 0;
int* pi = &i;
定义 pi 为“指向 int 型数据的指针”,即“保存 int 型数据地址的变量”,值为 i 的地址,& 为取地址操作符。
取指针所指的数据
pi 是指针,*pi
是取 pi 指向的变量,即是 i 本身,所以 *pi = i
。
移动指针
pi 是 int 型指针,pi++ 表示 pi 向后移动一个 int 字长(如 int 是四个字节,则 pi++ 向后移动四个字节),见上面代码的运行结果。
判断两个指针是否相同
两个指针相同,即是指向的地址相同:pi = pj。
NULL
This macro expands to a null pointer constant.
这个宏展开为一个“空指针常量”。
A null-pointer constant is either an integral constant expression that evaluates to zero (such as 0 or 0L), or a value of type nullptr_t (such as nullptr).
一个“空指针常量”要么是一个整型常量表达式,求值得出零(如 0 或 0L),要么是类型 nullptr_t 的一个值(如 nullptr)。
A null pointer constant can be converted to any pointer type (or pointer-to-member type), which acquires a null pointer value. This is a special value that indicates that the pointer is not pointing to any object.
一个空指针常量可以转型为任意“指针类型”(或“成员指针类型”),它获取一个“空指针值”。这是一个特殊的值,表示指针没有指向任何一个对象。
更详细的讨论请见这篇知乎。
void* 指针
void*
指针是无类型指针。可理解为 void*
指针指向一块未知类型的内存。void*
可以转为任意类型的指针。