6.2 指针************
6.2.1 内存空间的访问方式********
1. 地址编码的基本单位是字节
2. 静态生存期的变量在程序开始运行之前就已经被分配了内存空间,具有动态生存期的变量,是在程序运行时遇到变量声明语句时被分配内存空间的
6.2.2 指针变量的声明********
6.2.3 与地址相关的运算 “*” 和 “&”********
6.2.4 指针的赋值********
1. 数组名称实际上就是一个不能被赋值的指针,即指针常量
2. 指针的三种特殊类型
1. 指向常量的指针(不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象)
2. 指针类型的常量(指针本身的值不能被改变)
3. void类型的指针(任何类型的指针都可以赋值给void类型的指针变量,经过使用类型显式转换,通过void类型的指针便可以访问任何类型的数据) 一般只在指针所指向的数据类型不确定的时候使用
6.2.5 指针运算********
- 指针变量可以和整数0进行比较,0专用于表示空指针,也就是一个不指向任何有效地址的指针
6.2.6 用指针处理数组元素********
- 数组名不可以进行自增自减运算
6.2.7 指针数组********
1. 声明一维指针的语法形式
2. 特别注意
1 int array[3][3]={{1,2,3},{4,5,6},{7,8,9}};
2 //array[0]是一个长度为3的一维数组,当array[0]在表达式中出现时,表示一个指向该一维数组首地址的整型指针,(array[0])表示array[0][0],(array[0]+1)表示array[0][1]
3. 例题
6.2.8 用指针作为函数参数********
1. 用指针做形参的三个目的
1. 参数双向传递
2. 减少函数调用时数据传递的开销
3. 通过指向函数的指针传递函数代码的首地址
2. 注意
1. 如果函数中不需要通过指针变量改变指针所指对象的内容,应在参数表中将其声明为指向常量的指针
6.2.9 指针型函数(函数的返回值是指针类型)********
- 一般形式
6.2.10 指向函数的指针********
1. 一般形式
2. 例题
6.2.11 对象指针********
1. 对象指针的一般概念********
1. 注意事项
1. 对象指针在使用之前,一定要先进行初始化,让它指向一个已经声明过的对象,然后再使用
2. this 指针********
1. this指针是一个隐含于每一个类的非静态成员函数中的特殊指针(包括构造函数和析构函数),实际上是类成员函数的一个隐含参数,且这个隐含参数是常指针类型的
2. 对于常成员函数,this同时又是一个指向常量的指针
3. 指向类的非静态成员的指针********
1. 一般形式
1. 类型说明符 类名::*指针名;//指向数据成员的指针
2. 类型说明符 (类名::*指针名)(参数表);//指向函数成员的指针
3. 指针名=&类名::函数成员名;//能够被常成员函数赋值的指针,需要在声明时明确写出const 关键字
4. int (Point::*funcPtr)() const = &Point::getX;
5. (对象名.*类成员指针名)(参数表);
6. (对象名->*类成员指针名)(参数表);//调用方式
2. 实例
4. 指向类的静态成员的指针********
1. 对类的静态成员的访问是不依赖于对象的, 因此可以用普通的指针来指向和访问静态成员