@songying
2019-01-27T21:06:23.000000Z
字数 949
阅读 1009
c++
指针是一个变量,其值为另一个变量的地址
int *p = &val; // p 存放变量val的地址,
*
是类型修饰符,表示 p是一个指针。
- 指针本身就是一个对象,允许对指针赋值和拷贝,且在指针生命周期内它可以先后指向几个不同的对象。
- 指针无须在定义时赋初值
- 定义指针时如果没有初始化,它将拥有一个不确定的值。
空指针不指向任何对象,在试图使用一个指针之前代码可以首选检查它是否为空
int *p = nullptr; # 空指针,推荐
int *p = 0; # 空指针, 不推荐
int *p = Null; # 空指针,不推荐
nullprt 是一种页数类型的字面值,可以被转化为任意其他的指针类型
if(p) /* 如果 p非空,则完成 */
*
与 &
int *p; // 类型修饰符,是声明的一部分,表示p是一个指针
*p = i; // 解引用符, 用于访问对象
int &r = i; // 类型修饰符,是声明的一部分,表示r是一个引用
p= &r; // 取地址符, 获取对象的地址
++, --, +, -, ==, < , >
变量指针可以参与运算,但是数组指针不能参与运算,因为其是一个常量指针
pi = &ival // 改变指针 pi 的值
*pi = 3 // ival的值改变, 指针pi的值没有变化
type *ptr[size]; # 存储的都是指针
void*
可用于存放任意对象的地址。- 无法直接操作void*指针所指的对象
type **ptr;
通过 *
的个数可以区分指针的级别
引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用
int *p;
int *&r = p # r是一个对指针p的引用
面对一个比较复杂的指针或引用的声明语句时,从右到左阅读有助于弄清楚它的真实含义
type func_name(type *ptr){
// 函数体
}
type * func_name(){
// 函数体
}