第三版C语言PPT课件讲解第10章+指针

上传人:206****923 文档编号:51754343 上传时间:2018-08-16 格式:PPT 页数:90 大小:423KB
返回 下载 相关 举报
第三版C语言PPT课件讲解第10章+指针_第1页
第1页 / 共90页
第三版C语言PPT课件讲解第10章+指针_第2页
第2页 / 共90页
第三版C语言PPT课件讲解第10章+指针_第3页
第3页 / 共90页
第三版C语言PPT课件讲解第10章+指针_第4页
第4页 / 共90页
第三版C语言PPT课件讲解第10章+指针_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《第三版C语言PPT课件讲解第10章+指针》由会员分享,可在线阅读,更多相关《第三版C语言PPT课件讲解第10章+指针(90页珍藏版)》请在金锄头文库上搜索。

1、第十章 指针10.1 10.1 地址和指针的概念地址和指针的概念 数据在内存的存放、读取方式(以变量为例数据在内存的存放、读取方式(以变量为例 ):):用户在程序设计中 定义一个变量内存区每一个字节 有一个编号地址编译过程中:1、根据变量类型,分配一定长度的 内存空间;2、变量名转换为所分配内存的地址2、用户存取数据方式变量名地址地址所标志的内存段1 1、数据使用前的编译处理过程、数据使用前的编译处理过程数据数据一个比方:旅 客 变量数据 旅 客 名 字 变量 名 旅馆房间 内 存 区 旅馆房间号 地 址查找旅客:旅客名字房间号码房 间找到旅 客存取数据: 变量名 内存地址内存区数 据 注意:

2、内存单元的地址与内存单元的内容是不同的。内存单元地址旅馆房间号码内存单元内容住在房间内的旅客。内存地址331220 2000200220042006内存用户数据区内存中存 放的数据3、数据存取举例设程序中已定义三个整型变量设程序中已定义三个整型变量 i i, , j j , , k k,编译时系统将编译时系统将 20002000和和20012001两个字节给变量两个字节给变量i i ,20022002、20032003给给j j,20042004、20052005给给k k。 内存内存 分配示意图如下分配示意图如下内存地址 369200020022004内存用户数据区变量 i i变量 j j变

3、量 k kprintfprintf (“%d”,i) (“%d”,i) 变量名变量名i i 地址地址2000 2000 取变量值取变量值3 3 送到送到PRNPRN k = i + jk = i + j变量名变量名i i 地址地址2000 2000 取变量值取变量值3 3变量名变量名j j 地址地址2002 2002 取变量值取变量值6 6相加得9 送到K占用的2004,20054、直接访问与间接访问直接访问:在数据存取中,直接得到变量 i 地址然后按变量 i 的地址存取变量 i 的值的方式。间接访问:在数据存放中,变量 i 的地址不是直接得到, 而是存放在另一个变量i_pointer中,须先

4、从变量 i_pointer中 获取变量 i 地址,然后按变量i地址存取 变量值i的方式。一个比方(取抽屉A中的东西):直接访问:直接得到钥匙A 打开抽屉A,取出东西(直接获得变量 i 地址按变量 i 地址存取变量的 i 值 )间接访问:钥匙A在抽屉B中用钥匙B打开抽屉B得到钥匙A打开 抽屉A取得东西 变量i地址放在 变 量i_pointer中读取变量i_pointer 值得到变量i的地址按变量i地址存取i值* *间接访问例子间接访问例子 过程:根据变量名过程:根据变量名i_pointeri_pointer获得地址获得地址30103010,到地址,到地址 30103010 读取数据,得到读取数据

5、,得到20002000(变量(变量i i的地址),到的地址),到 20002000地地址读取数据,得到变量址读取数据,得到变量i i的值。的值。内存地址 369 20002000200220043010内存用户数据区变量 i i变量 j j 变量 k k变量 i_pointeri_pointer5 5、指针和指针变量、指针和指针变量指针:指针:一个变量的在内存区中的一个变量的在内存区中的地址地址称为指针。通过变量的称为指针。通过变量的指指针,可以找到变量的存储单元,从而读取其中存放的针,可以找到变量的存储单元,从而读取其中存放的 值;值;指针变量:指针变量:专门用来存放指针的专门用来存放指针的

6、变量变量,称为指针变量。指针,称为指针变量。指针变变量存放的数据为量存放的数据为另一变量的地址另一变量的地址(指针)。(指针)。 注意:指针与指针变量的区别注意:指针与指针变量的区别指针指针是一个是一个地址地址,用于指向存放变量数据的内存单,用于指向存放变量数据的内存单 元;元;指针变量指针变量是一个是一个变量变量,它的值是指针,它的值是指针例如:例如:变量变量 i i 的的地址地址20002000为该变量的为该变量的指针指针,变量,变量i_pointeri_pointer是是用来存放用来存放 变量变量i i的指针的,它是一个的指针的,它是一个指针变量指针变量。10.2 10.2 变量的指针和

7、指向变量的指针变量变量的指针和指向变量的指针变量指针指针:它首先是一个地址,是指变量在内存中的:它首先是一个地址,是指变量在内存中的地地 址址 ; 指针变量指针变量:它是一个变量,是一个专门:它是一个变量,是一个专门存放变量地存放变量地 址址的的变量变量,用来指向另一个变量。,用来指向另一个变量。 为了表示指针变量和它所指向的变量之间的联系为了表示指针变量和它所指向的变量之间的联系 , 在程序中用在程序中用“ “” ”表示表示“ “指向指向” ” 例:例:i_pointeri_pointer代表指针变量,而代表指针变量,而i_pointeri_pointer是是i_pointeri_point

8、er 所指向的变量。如下图所示:所指向的变量。如下图所示:i_pointeri_pointer200032000i ii_pointer与 i 是等效的,都 表示同一变量,该变量存放 地址为2000。因此: i3; i_pointer3两语句作用相同10.2.1定义一个指针变量例: int i, j ;int pointer_1 , pointer_2 ; 第一条命令定义了两个整型变量 i, j; 第二条命令定义了两个指针变量 pointer_1, pointer_2, 它们指向整型变量; 两个整型变量pointer_1, pointer_2 ,它们与 i,j为相同类型,被pointer_1,

9、 pointer_2两个指针所指向;基类型:指针变量的基类型是指该指针变量可以指向的变 量的类型;定义指针变量的一般形式:基类型 指针变量名 例:float pointer_3; (pointer_3是指向实型变量的指针变量)char pointer_4; (pointer_4是指向字符型变量的指针变量)指针变量指向的改变:指针变量指向的改变:方法:方法:将一个该指针将一个该指针允许指向允许指向的变量的的变量的地址地址赋给该指赋给该指 针;针;pointer_1=int *p1 , *p2 ; a = 100 ; b = 10 ;p1 = p2 = printf ( “ %d , %d n ”

10、, a , b ) ; /*“直接访问”方 式*/printf ( “ %d , %d n ”, *p1 , *p2 ) ; /* “间接访问” 方式*/ 结果: 100 , 10100 , 10程序中: *p1表示指针变量 p1所指向的变量,即 a .*p2表示指针变量 p2所指向的变量,即 b .p1ap1 = 则: 或 p2=则: p2 也指向变量 a . b: 如: int a, *p1 ;p1 = 则: * p1 = 则: (*p1) + + 等价于 a + + 但注意 *p1+ + 不等价于 (*p1) + + scanf ( “ %d , %d ” , p1 = p2 = if

11、( a max ) max = *p ;else if( *p max ) max = *p ;else if ( *p void main()void average(float *p,int n);void search(float (*p)4,int n);float score34=65,67,70,60,80,87,90,81,90,99,100,9 8;average(*score,12); search(score,2); void average(float *p,int n)float *p_end;float sum=0,aver;p_end=p+n-1;for(;py)

12、z=x;else z=y;return( z ); main ( ) int max( ) ; int (*p)( ) ;int a,b,c;p = max;scanf(“%d,%d ”,c = (*p)(a,b);printf (“a=%d,b=%d,max=%d ”,a,b,c); 可代替说明: 1. C语言中,函数调用可以有两种形式.即 函数名调用 和函数指针调用. 2. (*p ) ( ) 表示一个指向函数的指针变量,用于存放 函数的入口地址. 若把某一个函数的入口地址赋给它, 它就指向该函数.即在程序中一个函数指针变量可以 先后指向不同的函数. 3. 对于指向函数的指针变量作自增或自

13、减运算均无 意义 如: int (*p)( ); p+; p+n; p; 因为 p 只能指向函数的入口地址,而不能指向 函数内的某一条指令。二. 用指向函数的指针变量作函数参数函数指针变量作函数参数时,它是将函 数名(即函数的入口地址) 传给形参。这种方式的优点在于:多次调用函数, 且每次要调用的函数不固定时,只需给出不 同的函数名作实参即可。而函数不必作任何 修改,这符合结构化程序设计方法的原则。例 10.24 main( ) int max ( ) , min ( ) , add ( ) ;int a , b ;printf ( “ enter a and b :” ) ;scanf (

14、“ %d , %d ”, printf ( “ max = ” ) ;process ( a , b , max ) ;printf ( “ min = ” ) ;process ( a , b , min ) ;printf ( “ sum = ” ) ;process ( a , b , add ) ; max (int x ,int y ) int z ;if (x y ) z = x ;else z = y ;return ( z ) ; min(int x,int y ) int z ;if (x void main()float score 4=60,70,80,90,56,89,

15、67,88,34,78,90,66;float *search(float (*pointer)4,int n);float *p;int i,m;printf(“enter the number of student:“);scanf(“%d“,printf(“The scores of No.%d are:n“,m);p=search(score,m);for(i=0;i0 ) k=j;if( k!=i ) temp=namei; namei=namek; namek=temp; void print(char *name,int n ) int i ;for( i=0; i1 )printf ( “ % s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号