内容正文:
第9单元 指 针
1
目 录
2020/3/19
1
认识指针
2
3
4
指针访问基本变量
指针与一维数组
指针与二维数组
5
指针与字符串
6
7
8
指针数组
指针做函数参数
指向函数的指针
9
指针型函数
内存单元的编号
”
地址
特色
指针
指针与地址
任务1 认识指针
3
指针的
目标变量
指针
指针的目标
指针的目标
任务1 认识指针
4
任务1 认识指针
指针的目标
房间号
房间里的人
指针(地址)
指针的目标
房间 主存
5
说明
定义形式
什么叫指针变量?
存放地址的变量。
类型标识符 *指针变量名;
格式中的“*”是一个说明符,用来说明其后的变量是一个指针变量。
指针变量的定义
任务2 指针访问基本变量
6
举例
int a=12,*p;
p=&a;
指针变量的定义
图示
任务2 指针访问基本变量
7
注意
1)定义指针变量时的“*”表示该变量为指针变量,但指针变量名为p,而不是*p。
2)一个指针变量只能指向同一个类型的变量。
指针变量的定义
任务2 指针访问基本变量
8
类型标识符 *指针变量名=初始地址值;
int x;
int *p1=&x;
一般格式
举例
指针变量的初始化
任务2 指针访问基本变量
9
类型标识符 *指针变量名=初始地址值;
一般格式
指针变量的初始化
int x;
int *p1=&x;
举例
1)这里的初始化是对指针变量的初始化,而不是对指针所指数据的初始化。例如,上述例子中是把整型变量x的地址赋给了指针变量p1。
注意
任务2 指针访问基本变量
10
类型标识符 *指针变量名=初始地址值;
一般格式
指针变量的初始化
int x;
int *p1=&x;
举例
2)指针所指向对象的数据类型必须与指针的数据类型一致。
例如:
float x;
int *p1=&x;是错误的。
注意
任务2 指针访问基本变量
11
类型标识符 *指针变量名=初始地址值;
一般格式
指针变量的初始化
int x;
int *p1=&x;
举例
3)可以把一个指针的值赋给另一个指针。
例如:
int x;
int *q2,*q1=&x;
q2=q1;
注意
任务2 指针访问基本变量
12
类型标识符 *指针变量名=初始地址值;
一般格式
指针变量的初始化
int x;
int *p1=&x;
举例
4)可以把一个指针初始化为一个空指针。
例如:
int *q=NULL;
注意
任务2 指针访问基本变量
13
类型标识符 *指针变量名=初始地址值;
一般格式
指针变量的初始化
int x;
int *p1=&x;
举例
5)当把一个变量的地址作为初值赋给指针变量时,这个变量必须在指针初始化之前已经定义过,因为没定义过的变量其地址也没定义。
例如:
float f;
float *w=&f; /* 该定义语句之前,
f必须已经被定义 */
注意
任务2 指针访问基本变量
14
地址运算符“&”
例如,假如p是指针变量,a为整型变量,则p=&a;
此条语句中“&”的功能是:把变量a的地址取出来赋给指针变量p。
例如,假如p仍为指针变量,a,b为整型变量,
p=&a;
b=*p;
/* *p指p所指变量,等价于a */
指针运算符“*”
【注意】p,*p和&p三者的区别。
p:是指针变量,其内容是地址量。
*p:是指针变量所指向的变量,其内容是p所指变量的值。
&p:是指针变量本身所占据的内存地址。
地址与指针运算符
任务2 指针访问基本变量
15
1
用带参数的宏,求两数之和。
测一测
地址与指针运算符
阅读下列程序段,回答相应的问题。
int a=3,b=7,*p1,*p2;
p1=&a;
p2=&b;
p1=p2; /* 该语句的含义是? */
*p1=*p2; /* 该语句的含义是? */
任务2