指针使用
int *p1;//定义一个指向整形的指针,名字是p1
char * p2;//定义一个指向字符的指针,名字是p2
-
如果有“int *p”,指针变量名是p,而不是* p。
-
在定义指针变量时必须明确其指向的数据类型。
-
在C++中,通过在指针变量前加*的方法来取地址中的数据。
初始化指针和指针赋值
int a,*p=&a; //a前面的取地址运算符一定不可少
int *q=p; //这里p的指针指向的地址赋值给q,p就是地址名
- 指针变量也是有地址的,p如果是指针,&p即为这个指针的地址
指针的运算
-
指针的运算就是地址的运算
-
将指针p加上或者减去一个整数n,表示p向地址增加或减小的方向移动n个元素单元,从而得到一个新的地址,以便能够访问新地址中的数据。
-
每个数据单元的字节数取决于指针的数据类型。
int *p=&a;
*(p+1) //p+1地址下的值
*p+1 //p地址下的值加一
指针与数组
- 对于一个数组来说,数组的名称就是这个数组的首地址。同时数组名就是一个指针变量。
int array[10]; //定义array为包含10个整型数据的数组
int *p; //定义p为指向整型变量的指针变量
p=&array[0]; //对该指针赋值 或者p=array; “p=array”表示指针变量p被初始化为array的首地址
- 二维数组元素值在内存中是按行的顺序存放
a[i]可表示一维数组 (a[i][0],a[i][1],…,a[i][n])的首地址&a[i][0]
a[i]=*(a+i)=&a[i][0]
指针与字符串
char *p=″how are you? ″; //存储在字符数组中的字符串不能直接支持字符串间的赋值和连接
以结束符号‘\0’为结束
char str[20]={“how are you?”};//数组声明只能一个一个赋值
char * array =“how are you?”; //字符指针赋值
指向指针的指针
- 运算符具有右结合性,*p相当于*(*p)
const指针
const int * p1;//p1是一个指向整型常量的指针,该指针指向的值是不能改变的。
int * const p2;//p2也是一个指向整型常量的指针,它指向的整数是可以改变的,但是p2这个指针不能指向其他的变量。
void指针
void指针类型,可以用来指向一个抽象类型的数据,在将它的值赋给另一个指针变量时,要进行强制类型转换使之适合于被赋值的变量的类型。