[关闭]
@songying 2019-01-27T21:06:23.000000Z 字数 949 阅读 1009

c++ 指针

c++


简介

指针是一个变量,其值为另一个变量的地址

  1. int *p = &val; // p 存放变量val的地址,

0. 指针与引用

  • 指针本身就是一个对象,允许对指针赋值和拷贝,且在指针生命周期内它可以先后指向几个不同的对象。
  • 指针无须在定义时赋初值
  • 定义指针时如果没有初始化,它将拥有一个不确定的值。

1. 空指针

空指针不指向任何对象,在试图使用一个指针之前代码可以首选检查它是否为空

  1. int *p = nullptr; # 空指针,推荐
  2. int *p = 0; # 空指针, 不推荐
  3. int *p = Null; # 空指针,不推荐

nullprt 是一种页数类型的字面值,可以被转化为任意其他的指针类型

  1. if(p) /* 如果 p非空,则完成 */

2. *&

  1. int *p; // 类型修饰符,是声明的一部分,表示p是一个指针
  2. *p = i; // 解引用符, 用于访问对象
  3. int &r = i; // 类型修饰符,是声明的一部分,表示r是一个引用
  4. p= &r; // 取地址符, 获取对象的地址

3. 指针运算

++, --, +, -, ==, < , >

变量指针可以参与运算,但是数组指针不能参与运算,因为其是一个常量指针

4. 赋值与指针

  1. pi = &ival // 改变指针 pi 的值
  2. *pi = 3 // ival的值改变, 指针pi的值没有变化

5. 指针数组

  1. type *ptr[size]; # 存储的都是指针

6. void* 指针

  • void* 可用于存放任意对象的地址。
  • 无法直接操作void*指针所指的对象

7. 指针的指针

  1. type **ptr;

通过 * 的个数可以区分指针的级别

8. 指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用

  1. int *p;
  2. int *&r = p # r是一个对指针p的引用

面对一个比较复杂的指针或引用的声明语句时,从右到左阅读有助于弄清楚它的真实含义

9. 传递指针给函数

  1. type func_name(type *ptr){
  2. // 函数体
  3. }

10 从函数返回指针

  1. type * func_name(){
  2. // 函数体
  3. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注