欢迎来到天天文库
浏览记录
ID:33927945
大小:1.08 MB
页数:34页
时间:2019-02-28
《c语言课件006》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、下载第6章指针指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效,清爽。但由于指针对初学者来说,难于理解和掌握,需要一定的计算机硬件的知识做基础,这就需要多做多练,多上机动手,才能在实践中尽快掌握,成为C的高手。6.1指针与指针变量过去,我们在编程中定义或说明变量,编译系20001变量a统就为已定义的变量分配相应的内存单元,也就是20022变量b说,每个变量在内存会有固定的位置,有具体的地2004址。由于变量的数据类型不同,它所占的内存单元3
2、.4变量x数也不相同。若我们在程序中做定义为:inta=1,b=2;20084.5变量yfloatx=3.4,y=4.5;doublem=3.124;charch1='a',ch2='b';变量m让我们先看一下编译系统是怎样为变量分配内3.1242012存的。变量a,b是整型变量,在内存各占2个字节;2020a变量ch1x,y是实型,各占4个字节;m是双精度实型,占8个2021b变量ch2字节;ch1,ch2是字符型,各占1个字节。由于计算机内存是按字节编址的,设变量的存放从内存2000单元开始存放,则编译系统对变量在内存的安放情图6-1不同数据类型的变量在内存中况为图6-1所示。占
3、用的空间变量在内存中按照数据类型的不同,占内存的大小也不同,都有具体的内存单元地址,如变量a在内存的地址是2000,占据两个字节后,变量b的内存地址就为2002,变量m的内存地址为2012等。对内存中变量的访问,过去用scanf("%d%d%f",&a,&b,&x)表示将数据输入变量的地址所指示的内存单元。那么,访问变量,首先应找到其在内存的地址,或者说,一个地址唯一指向一个内存变量,我们称这个地址为变量的指针。如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量,通过指针对所指向变量的访问,也就是一种对变量的“间接访问”。设一组指针变量pa、pb、px
4、、py、pm、pch1、pch2,分别指向上述的变量a、b、x、y、m、ch1、ch2,指针变量也同样被存放在内存,二者的关系如图6-2所示:在图6-2中,左部所示的内存存放了指针变量的值,该值给出的是所指变量的地址,通过该地址,就可以对右部描述的变量进行访问。如指针变量pa的值为2000,是变量a在内存的地92C语言程序设计下载址。因此,pa就指向变量a。变量的地址就是指针,存放指针的变量就是指针变量。20001变量a2000pa100020022变量b10022002pb10042004px3.4变量x200410062008py10082012pm变量y4.5200810102
5、020pch110122021pch220121014变量m3.12410162020a变量ch12021b变量ch2图6-2指针变量与变量在内存中的关系6.2指针变量的定义与引用6.2.1指针变量的定义在C程序中,存放地址的指针变量需专门定义;int*ptr1;float*ptr2;char*ptr3;表示定义了三个指针变量ptr1、ptr2、ptr3。ptr1可以指向一个整型变量,ptr2可以指向一个实型变量,ptr3可以指向一个字符型变量,换句话说,ptr1、ptr2、ptr3可以分别存放整型变量的地址、实型变量的地址、字符型变量的地址。定义了指针变量,我们才可以写入指向某种数
6、据类型的变量的地址,或者说是为指针变量赋初值:int*ptr1,m=3;float*ptr2,f=4.5;char*ptr3,ch='a';ptr1=&m;ptr2=&f;ptr3=&ch;上述赋值语句ptr1=&m表示将变量m的地址赋给指针变量ptr1,此时ptr1就指向m。三条赋值语句产生的效果是ptr1指向m;ptr2指向f;ptr3指向ch。用示意图6-3描述如下:第6章指针93下载ptr1mptr2fptr3ch&m3&f4.5&cha图6-3赋值语句的效果需要说明的是,指针变量可以指向任何类型的变量,当定义指针变量时,指针变量的值是随机的,不能确定它具体的指向,必须为其赋
7、值,才有意义。6.2.2指针变量的引用利用指针变量,是提供对变量的一种间接访问形式。对指针变量的引用形式为:*指针变量其含义是指针变量所指向的值。[例6-1]用指针变量进行输入、输出。main(){int*p,m;scanf("%d",&m);p=&m;/*指针p指向变量m*/printf("%d",*p);/*p是对指针所指的变量的引用形式,与此m意义相同*/}运行程序:RUN¿3¿3上述程序可修改为:main(){int*p,m;p=&m;scanf(
此文档下载收益归作者所有