内容正文:
《C语言学习与应用》教学课件
任务说明
在本学习任务中,我们将学习指针变量的定义、赋值和使用,通过若干应用举例和任务的完成掌握指针在主函数与函数间的多值传递。
学习任务6 指针操作——主函数与函数间的多值传递
知识要求
掌握指针变量的定义方法。
掌握指针变量的基类型以及指针变量赋值的方法。
了解指针能参与的运算。
理解变量的直接访问和间接访问。
掌握以形参为指针的自定义函数。
学习任务6 指针操作——主函数与函数间的多值传递
能力要求
能够读懂使用指针变量的程序。
能够用指针访问变量。
能够借用指针的灵活地编写程序。
能够调试含指针变量的程序。
能够运用指针灵活地书写函数和主函数。
学习任务6 指针操作——主函数与函数间的多值传递
一个变量实际是代表内存中的某个存储单元,内存是以字节为单位的一片连续存储空间,每个字节有一个编号,即内存地址,变量的地址就是变量的指针。我们可以通过两种方式访问变量:一是直接存取方式,即直接按变量的地址存取变量值;二是间接存取方式,它是先通过某变量获得变量的地址,再获取变量值。
1.变量的地址和指针
指针
01
学习任务6 指针操作——主函数与函数间的多值传递
2.指针半变量的定义和指针变量的基类型
专用于存放地址的变量称为指针变量。指针变量也是变量,要先定义后使用。为了与一般变量区分开,定义指针变量时要加星号“*”。例如:
int *p,*s,k=20; //定义了两个指针变量p、s和一个普通变量k
指针移动的最小单位是存储单元,定义时的类型称为基类型。基类型为int的指针变量p,当有p+1时,此处的1表示一个整型的存储单元(4个字节),只能给p赋整型变量的地址。如有“double *q;”,当有q+1时,此处的1表示一个double型的存储单元(8个字节),只能给q赋double型变量的地址。
指针变量也在内存中存放,也有地址。存放指针变量地址的变量在被定义时要有两个星号,因此在定义指针变量时出现两个以上的星号是正确的,如“int**t;”。
学习任务6 指针操作——主函数与函数间的多值传递
3.给指针变量赋值
给指针变量赋值的方法如下。
int k=20,*p,*q;
p=&k; //将变量的地址赋给指针变量
q=p; //在指针变量之间赋值
p=NULL //给指针变量赋空值, 与p='\0'或p=0等价
学习任务6 指针操作——主函数与函数间的多值传递
微课
指针变量赋值
学习任务6 指针操作——主函数与函数间的多值传递
4.指针变量的操作
1)星号“*”
用于指针的星号“*”有两种方式:一是出现在定义语句中,表示此变量与一般变量不同,是一个指针变量;二是出现在可执行语句中,星号“*”是间接运算符,表示该指针对应的变量。
例如:
int *p,i=10; //变量的定义,*p中的星号表示p是指针变量
p=&i; //为指针变量赋值
*p=56; //此处*p表示p所指变量i,等价于i=56,星号是间接运算符
学习任务6 指针操作——主函数与函数间的多值传递
2)*与&的抵消
程序代码“int k,*p;p=&k;”中,*p就是k,即*&k就是k,*与&是抵消的。作为间接运算符的“*”,它的右边只能是地址变量即指针,而&的右边只能是变量,如写作&*k,“*”的右边不是地址变量就错了。
另外,还可以在定义指针变量的同时为指针变量赋值。
例如:
int i,*p;
p=&i;
以上这两句可以合并为一条,
int i=10,*p=&i; //定义p的同时,给p赋值,即变量的初始化
“*p=&i”只能出现在定义语句中。
4.指针变量的操作
学习任务6 指针操作——主函数与函数间的多值传递
1.指针变量参与的运算
指针变量 加(减) 整数
指针变量 关系运算符 指针变量
指针变量 减 指针变量
有如下程序代码:
int a[10],*p=&a[0],*q=&a[9]; //a[10]是数组
则 p+3是&a[3],(q-2)是&a[7],
*(p+3)是a[3],*(q-2)是a[7]。
指针的运算
02
学习任务6 指针操作——主函数与函数间的多值传递
微课
指针变量参与的运算
学习任务6 指针操作——主函数与函数间的多值传递
2.“++”用于指针
有如下程序代码。
int i=10,*p=&i;
则*p就是i,因此“i=i+1;”可写作“*p=*p+1;”、“*p+=1;”、“++*p;”或“(