各类指针对比
变量定义 | 类型表示 | 含义 |
---|---|---|
int *p ; | int * | 定义p为指向整型数据的指针变量 |
int *p[4]; | int * [4] | 定义指针数组,是由4个指向整形数据的指针元素组成 |
int (*p) [4]; | int (*) [4] | p为指向包含4个元素的一维数组的指针变量 |
int *p(); | int * () | p为返回一个指针的函数,该指针指向整型数据 |
int (*p)(); | int (*)() | p为指向函数的指针,该函数返回一个整型值 |
int **p; | int ** | p是一个指针变量,它指向一个指向整型数据的指针变量 |
const int *p | const int * | p是指向常量的指针变量,不能通过p改变其指向的变量的值 |
int const *p | int const * | p是常指针,其指向不能改变 |
const int *const p | const int * const | p是指向常量的指针,其指向不能改变,且不能通过p改变其指向的变量的值 |
void * p | void * | p是一个指针变量,基类为void(空类型),不指向具体的对象 |
viod 类型可以包容其他类型,而其他类型不能包容void
- 指向数据成员的指针
p1 = &t1.hour
- 指向对象成员函数的指针
void(Time::*p2)(); //定义p2为指向Time类中公用成员函数的指针变量
p2 = &Time::get_time();
- this指针
每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n个同样大小的空间以存放n个对象的数据成员。但是不同的对象都要调用同一个函数的代码。所以在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。this指针是隐式使用的,它作为参数被传递给成员函数。
//可以张扬理解
a.volume(&a);
//函数定义
int Box::volume(Box *this)
{
return (this->height*thiswidth*this->length)
}
引用
对一个数据可以建立一个引用,它的作用是为一个变量起一个别名.
int a; //定义a是整型变量
int &b = a; //声明b是a的引用
这里的&是引用声明符。在数据类型名后面出现的&是引用声明符,在其他场合出现的都是地址符。
- 引用不是一种独立的数据结构,对引用只有声明没有定义;
- 声明一个引用是,必须同时使之初始化,即代表它是代表哪一个变量;
- 在声明一个引用后,不能再使之作为另一个变量的引用;
- 不能建立引用数组;
- 不能建立引用的引用,不能建议指向引用的指针;
- 可以取引用的地址;
在函数声明形参时,指定整型变量的引用,调用函数,是地址传递方式,即传址方式。
函数调用的传值方式和传址方式的最大区别:传值方式时临时变量必须分配空间,而传址方式,由于形参是引用,系统会自动将实参的地址传递给形参,并没有新分配空间。