欢迎来到天天文库
浏览记录
ID:62067791
大小:1.10 MB
页数:183页
时间:2021-04-14
《最新C语言程序设计 教学课件 崔永君 彭静 全书 第8章教学讲义PPT.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计教学课件崔永君彭静全书第8章第8章 指针8.1指针变量的定义与引用8.2指针运算符8.3指针变量与数组8.4字符指针8.5函数与指针8.6指针数组和指向指针的指针变量8.1指针变量的定义与引用8.1.1指针与指针变量一般把存储器中的一个字节称为一个内存单元,由于变量的数据类型不同,它所占的内存单元数也不相同,如整型量占2个单元,字符量占1个单元等。 例如,在程序中作如下定义: inta=1,b=2; floatx=3.14,y=5.3; doublem=3.124; charch1='a',ch2='b
2、';内存单元的指针和内存单元的内容是两个不同的概念。可以用一个通俗的例子来说明它们之间的关系。我们到银行存/取款时,银行工作人员将根据我们的账号寻找我们的存款单,找到之后在存款单上写入存/取款的金额。这里,账号就是存款单的指针,存/取款数是存款单的内容。对于一个内存单元来说,单元的地址即指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。通过指针对所指向变量的访问,也就是一种对变量的“间接访问”。 例如:设一组指针变量pa、pb、px、
3、py、pm、pch1、pch2分别指向上例的变量a、b、x、y、m、ch1、ch2,指针变量也同样被存放在内存中,二者的关系如图8-2所示。图8-2指针变量与变量在内存中的关系图8-2中,左部所示的内存中存放了指针变量的值,该值给出的是所指变量的地址,通过该地址可以对右部描述的变量进行访问。如指针变量pa的值为2000,是变量a在内存的地址。我们称指针变量pa指向变量a,或者说pa是指向变量a的指针。变量的地址就是指针,存放指针的变量就是指针变量。8.1.2指针变量的定义在C程序中,存放地址的指针变量需专门定义,指针变量的一般定义形式如下: 类型
4、说明符*变量名;其中,* 表示这是一个指针变量,“变量名”即定义的指针变量名,“类型说明符”表示本指针变量所指向的变量的数据类型。例如:“int*p1;”表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。再如: staticint*p2;/*p2是指向静态整型变量的指针变量*/ float*p3;/*p3是指向浮点变量的指针变量*/ char*p4;/*p4是指向字符变量的指针变量*/ 应该注意的是,一个指针变量只能指向同类型的变量,如p3只能
5、指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。8.1.3指针变量的赋值未经赋值的指针变量不能使用,否则将造成系统混乱,甚至导致死机。指针变量的赋值只能赋予地址,而不能赋予任何其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址,因此,C语言中提供了地址运算符&来表示变量的地址。 其一般形式如下: &变量名;例如&a表示变量a的地址,&b表示变量b的地址。变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a的地址赋予p可以有以下两种方式。 (1)指针变量
6、初始化的方法: inta; int*p=&a; (2)赋值语句的方法: inta; int*p; p=&a;8.1.4指针变量的引用【例8.1】用指针变量进行输入、输出。 源程序如下: main() { int*p,m; printf("Pleaseinputainteger:"); scanf("%d",&m); p=&m;/*指针p指向变量m*/ printf("%d",*p }上述程序可修改为 main() { int*p,m; p=&m;
7、 printf("Pleaseinputainteger:"); scanf("%d",p);/* p是变量m的地址,可以替换&m*/printf("%d",m); }请读者思考一下,若将程序修改为如下形式: main() { int*p,m; printf("Pleaseinputainteger:"); scanf("%d",p); p=&m; printf("%d",m); }会产生什么样的结果?此时运行结果是未知的,因为在调用指针变量p之前没有对它进行赋值,所以,自然也无法对它所指向
8、的变量进行赋值。 再如: inti,j,*p; p=&i; *p=100;
此文档下载收益归作者所有