欢迎来到天天文库
浏览记录
ID:76733595
大小:197.85 KB
页数:32页
时间:2022-01-19
《C语言程序设计课件:第8章 善于利用指针》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章善于利用指针一、指针在程序中的用途二、地址和指针的概念三、变量的指针和指针变量四、数组与指针五、字符串与指针六、返回指针值的函数主要内容:一、指针在程序中的用途有效的表示复杂的数据结构能动态分配内存方便的使用字符串直接处理内存地址总之,指针的应用,使程序简洁、紧凑、高效。二、指针的概念1.数据在内存中的存储、读取过程例如:整型变量i,j,k;在编译时为变量分配内存,内存示意图如图1所示.(2)给变量赋值为i=3;j=6;k=9;(1)假设变量i,j,k被分配的内存地址分别为2000,2002,2004(3)通常,在程序中通过变量名对变量进
2、行存取。200020022004变量i变量j变量k内存中用户数据区。。。。。。36920003010内存地址编号变量p其实程序经过编译后已将变量名转换为变量的地址,对变量值的存取都是通过变量的地址进行的。图1(1)直接访问方式按变量地址存取变量值的方式。如果读取变量i的值,直接到为变量i分配的存储单元(2000、2001字节)中取出i的值(3)即可。(2)间接访问方式先将变量i的地址存放在另一个变量p中,如果读取变量i的值,先找到变量p,从p中取出内容(2000,即变量i的起始地址),然后到2000、2001字节中取出i的值(3)。即通过变量p
3、访问为变量i分配的内存单元。访问变量的两种方式:直接访问示意图间接访问示意图表示将数值3送到变量i中,可有两种表达方法:(1)将3送到变量i所标志的单元中。即直接访问方式(2)将3送到变量p所指向的单元(变量i)中。即间接访问方式i32000i320002000p注意:我们并不关心变量p的存储地址,对变量p的访问属于直接访问。三、指针变量1.变量的指针变量的地址称为变量的指针。2.指针变量存储变量地址的变量称为指针变量,用来指向另一个变量。3.操作符为了表示指针变量与它所指向的变量的之间的关系,在程序中用符号表示“指向”。例如,P代表指针变量,
4、P则表示P所指向的变量。3i20002000PP以下两个语句作用相同:i=3;P=3;三、指针变量(续)4.指针变量的定义inti,j;intpointer1,pointer2;定义形式:基类型指针变量名;举例说明(1)指针变量名前的,表示该变量是指针型的变量。指针变量名为pointer1,而非pointer1。(2)定义指针变量时必须指明基类型。注:以后几张幻灯片中提到的pointer1pointer2是基于此例的。如何使一个指针变量指向一个变量呢?使用取地址运算符&,即:pointer1=&i;pointer2=&j;赋值语句pointer
5、1=&i;实现将变量i的地址保存入指针变量pointer1中。如右图所示。3ipointer1pointer1你能画出第二个赋值语句的示意图吗?三、指针变量5.指针运算符&三、指针变量(续)6.指针变量的引用与指针变量有关的两个运算符:&:取地址运算符:间接访问运算符(1)上例将打印出i的值。(2)pointer1与普通的整型变量一样使用,但前提是pointer1必须已经明确地指向了某整型变量,或者说指针变量中必须已经存有了某整型变量的起始地址。例如i=3;pointer1=&i;printf("%d",pointer1);说明3ipointe
6、r1pointer1三、指针变量(续)例1:输入两个整数,按先大后小输出这两个整数#includeintmain(){intp1,p2,p,a,b;scanf("%d%d",&a,&b);p1=&a;p2=&b;/取变量的地址/if(a7、此时,实参和形参之间仍然是传值方式。参见例2。#includevoidswap(intp1,intp2){inttemp;temp=p1;p1=p2;p2=temp;}intmain(){inta,b,pointer1,pointer2;scanf("%d%d",&a,&b);pointer1=&a;pointer2=&b;/取变量的地址/if(a8、}在被调函数中,通过间接访问,改变了主调函数中实参变量的值。变量a,b的地址被传递到函数的形参变量p1,p2中四、数组与指针1.数组的存储数组在内存中
7、此时,实参和形参之间仍然是传值方式。参见例2。#includevoidswap(intp1,intp2){inttemp;temp=p1;p1=p2;p2=temp;}intmain(){inta,b,pointer1,pointer2;scanf("%d%d",&a,&b);pointer1=&a;pointer2=&b;/取变量的地址/if(a8、}在被调函数中,通过间接访问,改变了主调函数中实参变量的值。变量a,b的地址被传递到函数的形参变量p1,p2中四、数组与指针1.数组的存储数组在内存中
8、}在被调函数中,通过间接访问,改变了主调函数中实参变量的值。变量a,b的地址被传递到函数的形参变量p1,p2中四、数组与指针1.数组的存储数组在内存中
此文档下载收益归作者所有