指针
1.定义
内存中的一个字节(Byte)为一个存储单元。
存储单元的编号称为地址。
变量的地址是指该变量所在存储区域的第一个字节(单元)的地址。
这三个地址就称为变量a、b、c的指针
指针变量用于存放地址值。
指针变量的定义格式:类型说明符 *指针变量名;
例:int *pi ; 定义 pi 为指向 int 类型变量的指针变量
注:C++语言规定有效数据的指针不指向0单元(为非0值),如果指针变量值为0,即NULL(在ios.h中已定义),表示空指针,即不指向任何变量。
2.运算符
& 取址运算符
功能:返回变量的内存地址(升一级)
* 取值运算符
功能:访问指针指向的变量(降一级)
例:
int *p,m;
m = 200;
p = &m;
//则p等价于&m,*p等价于m
3.指针变量的初始化
初始化格式:类型说明符 *指针变量名=初始地址值 ;
例:
char c, *p1 ;
p1=&c ; /* 赋值语句,定义后进行 */
例:
char c ;
char *pc=&c ; /* 指针初始化,定义时进行 */
注:
(1)指针变量p必须初始化或赋值获得值后才能使用*p访问。
即
int x,*p ;
x=0 ;
*p=x ;
//是错误的
(2)若有 int m ; int *p = &m ;等价于:int m ; int *p ; p = &m ;
4.直接访问与间接访问
直接存取方式(直接访问):在程序中体现为直接使用变量名来存取变量值
间接存取方式(间接访问):在程序中体现为通过 p 来存取变量 m 的值。
m=5,n=m 直接存取 m,*p=5,n=*p 间接存取 m
5.指针做函数参数
(1)基本类型量做函数参数
#include <iostream>
using namespace std;
void swap(int x,int y)
{ int t;
t=x; x=y; y=t;
}
void main( )
{ int x=3, y=9;
swap(x,y);
cout<< x<< ','<< y<<endl;
}
输出:3,9
(2)使用引用
#include <iostream>
using namespace std;
void swap(int &x,int &y)
{ int t;
t=x; x=y; y=t;
}
void main( )
{ int x=3, y=9;
swap(x,y);
cout<< x<< ','<< y<<endl;
}
输出:9,3
(3)指针做函数参数
#include <iostream>
using namespace std;
void swap(int *px,int *py)
{ int t;
t=*px;*px=*py;*py=t;
}
void main( )
{ int x=3,y=9,*p1,*p2;
p1=&x; p2=&y;
swap(p1,p2);
cout<< x<< ','<< y<<endl;
}
等价于
#include <iostream>
using namespace std;
void swap(int *px,int *py)
{ int t;
t=*px;*px=*py;*py=t;
}
void main( )
{ int x=3,y=9;
swap(&x,&y);
cout<< x<< ','<< y<<endl;
}
输出:9,3