文档详情

c语言教案第五章.ppt

发布:2018-01-31约5.51千字共22页下载文档
文本预览下载声明
第 5 章 指针在程序中的用途 有效的表示复杂的数据结构 能动态分配内存 方便的使用字符串 直接处理内存地址 总之,指针的应用,使程序简洁、紧凑、高效。 一、指针的概念 1.数据在内存中的存储、读取过程 例如:整型变量 i , j , k ; 在编译时为变量分配内存,内存示意图如图 1 所示. (1) 直接访问(引用)方式 按变量地址存取变量值的方式。 如果读取变量 i的值,直接到为变量i分配的存储单元(2000、2001、2002、2003字节)中取出i的值(3)即可。 直接访问示意图 二、 指针变量 1.变量的指针 变量的地址称为变量的指针。 2. 指针变量 存储变量地址的变量称为指针变量,用来指向另一个变量。 3. * 操作符 为了表示指针变量与它所指向的变量的之间的关系,在程序中用 * 符号表示“指向”。 二、 指针变量(续) 4.指针变量的定义 二、 指针变量(续) 6.指针变量的引用 二、 指针变量(续) 例1: 输入两个整数,按先大后小输出这两个整数 四、一维数组与一维指针 1.数组的存储 四、一维数组与一维指针 四、一维数组与一维指针 四、一维数组与一维指针 四、一维数组与一维指针 * 一级指针与一维数组 一、指针在程序中的用途 二、地址和指针的概念 三、变量的指针和指针变量 四、一级指针变量与一维数组 主要内容: (2) 给变量赋值为 i=3; j=6; k=9; (1) 假设变量 i,j,k 被分配的 内存地址分别为2000,2004,2008 (3) 通常,在程序中通过变量名对变量 进行存取。 2000 2004 2008 变量i 变量j 变量k 内存中用户数据区 。。。 。。。 3 6 9 2000 3020 内存地址编号 变量 p 其实程序经过编译后已将变量名转换为变量的地址,对变量值的存取都是通过变量的地址进行的。 图1 (2) 间接访问(引用)方式 先将变量 i 的地址存放在另一个变量p中,如果读取变量 i的值,先找到变量p,从p中取出内容(2000,即变量i的起始地址),然后到2000、2001、2002、2003字节中取出i的值(3)。 即通过变量p访问为变量i分配的内存单元。 访问变量的两种方式: 间接访问示意图 表示将数值3送到变量i中,可有两种表达方法: (1)将3送到变量i所标志的单元中。即直接访问方式 (2)将3送到变量p所指向的单元(变量i)中。 即间接访问方式 i 3 2000 i 3 2000 2000 p 注意:我们并不关心变量p的存储地址, 对 变量p的访问属于直接访问。 例如,P代表指针变量,* P则表示P所指向的变量。 3 i 2000 2000 P *P 以下两个语句作用相同: i=3; *P=3; int i , j ; int *pointer1, *pointer2; 定义形式: 基类型 *指针变量名; 举例 说明 (1)指针变量名前的*,表示该变量是指针型的变量。指针变量名为pointer1,而非 *pointer1。 (2)定义指针变量时必须指明基类型。 *注:以后几张幻灯片中提到的pointer1 pointer2是基于此例的。 如何使一个指针变量指向一个变量呢? 使用取地址运算符 ,即 :pointer1=i; pointer2=j; 赋值语句pointer1=i;实现将变量i的地址保存入指针变量pointer1中。如右图所示。 3 i pointer1 *pointer1 你能画出第二个赋值语句的示意图吗? 二、 指针变量 5.指针运算符 与指针变量有关的两个运算符: : 取地址运算符 * :间接访问运算符 (1)上例将打印出i的值。 (2)*pointer1 与普通的整型变量一样使用,但前提是pointer1 必须已经明确地指向了某整型变量,或者说指针变量中必须已经存有了某整型变量的起始地址。 例如 i=3; pointer1=i; printf(%d,*pointer1); 说明 3 i pointer1 *pointer1 #include stdio.h void main
显示全部
相似文档