C语言课件ch10.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 指 针 C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值 10.1 地址和指针的概念 C编译程序编译到该变量定义语句时,将变量num 登录到“符号表”中。符号表的关键属性有两个: 一是“标识符名(id)” , 二是该标识符在内存空间中的“地址(addr)” 。 为描述方便,假设系统分配给变量num的2字节存储单元为 3000 和3001,则起始地址3000就是变量num在内存中的地址。 变量值的存取──通过变量在内存中的地址进行 系统执行scanf(“%d”,num);和printf(“num=%d\n”, num);时,存取变量num值的方式可以有两种: (1)直接访问──直接利用变量的地址进行存取 scanf(“%d”,num)的执行过程是这样的: 用变量名num作为索引值,检索符号表,找到变量num的起始地址3000; 然后将键盘输入的值(假设为3)送到内存单元3000和3001中。 printf(num=%d\n,num)的执行过程,与scanf()很相似: 找到变量num的起始地址3000, 从3000和3001中取出其值,最后将它输出。 (2)间接访问──通过另一变量访问该变量的值 C语言规定:在程序中可以定义一种特殊的变量(称为指针变量),用来存放其它变量的地址。 直接访问与间接访问 直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量 10.2 指针与指针变量 指针:变量的地址 指针变量:专门存放变量地址的变量 10.2.1 定义一个指针变量 基类型 *指针变量名; 10.2.1 定义一个指针变量 基类型 *指针变量名; 10.2.2 指针变量的引用 :取地址运算符 * :指针运算符 指针应用举例 10.2.3 指针变量作为函数参数 ——地址传递 10.3 数组与指针 指向数组元素的指针 和指向变量的指针一样 10.3 数组与指针 输出数组中的全部元素(eg10.5) 下标法 数组名计算地址法 指针变量法 数组名计算数组元素地址法 指针变量指向数组元素法 指针变量的运算 如果p指向数组a的首元素(p=a): P++ *p++ *(p++)和*(++P)的区别 (*p)++ 如果p当前指向a数组中的第i个元素: *(p--)相当于a[i--] *(++p)相当于a[++i] *(--p)相当于a[--i] 10.3.3 用数组名作函数参数 教材例程: eg10.7——eg10.10 10.3.4 多维数组与指针 多维数组的地址 int array[3][4]; 从2维数组角度看,数组名array代表数组的起始地址, 是一个以行为单位进行控制的行指针: array+i:行指针值,指向2维数组的第i行。 *(array+i):(列)指针值,指向第i行第0列(控制由行转为列,但仍为指针)。 *(*(array+i)):数组元素array[i][0]的值。 用array作指针访问数组元素array[i][j]的格式: *(*(array+i)+j) 10.4 字符串与指针 字符串的表示形式 可以用字符数组表示字符串 可用字符指针变量来表示 10.5 指向函数的指针 用函数指针调用函数 一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。 可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。 指向函数的指针变量 定义格式 函数类型 (*指针变量)( ); 10.5 指向函数的指针 赋值 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值。 指向函数的指针变量=[]函数名; 调用格式 (*函数指针变量)([实参表]) 用指向函数的指针作函数参数 eg24 10.6返回指针值的函数 函数的返回值可以是整型、字符、实型值,当然也可以是指针型的值 即返回的是某个内存数据的地址 函数定义 指针类型名 * 函数名(参数列表) eg25 * * 程序中: int i,j,k; 内存 编译或函数调用时为其分配内存单元 变量是对程序中数据 存储空间的抽象 … …… 3 6 9 …… 2000 0 内存中每个字节有一个编号 ——地址 2000 2002 2004 3010 main() { int num; scanf(%d,num); printf(num=%d\n, num); } 变量地址──系统分配给变量的内存单元的起始地址 例如: 例 i=3; -----直接访问 指针变量 …... …... 2000 2004 2006 2005

文档评论(0)

bbnm58850 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档