06-指针资料.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1 概念 变量与地址 6.2 指针与变量 与*运算符 含义 直接访问与间接访问 直接访问:按变量地址存取变量值 间接访问:通过存放变量地址的变量去访问变量 指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 6.3 多级指针 6.4 指针与数组 对二维数组 int a[3][4],有 a-----二维数组的首地址,即第0行的首地址 a+i-----第i行的首地址 a[i] ? *(a+i)------第i行第0列的元素地址 a[i]+j ? *(a+i)+j -----第i行第j列的元素地址 *(a[i]+j) ? *(*(a+i)+j) ? a[i][j] 二维数组的指针变量 指向二维数组元素的指针变量 指向一维数组的指针变量 定义形式: 数据类型 (*指针名)[一维数组维数]; 例 int (*p)[4]; 6.5 动态内存分配 复习思考题 目的要求 上机练习 1.理解下列名词或概念: 指针常量 指针变量 多级指针 行指针 指针数组 静态内存分配 动态内存分配 程序区 数据区 2.如何定义指针?任何使用指针处理单个变量? 3.如何使用多级指针处理数据? 4.如何使用指针处理一维数组? 5.常用的指针运算有哪些? 6.使用指针处理二维数组的方法有哪些? 各如何处理? 7.动态内存分配函数有哪些?如何使用? 图6-16 使用指针处理首元素 同指向一般变量一样,只要把数组元素的地址赋给指针,指针就指向了该元素 1. 指向数组元素 (1)指向首元素 图6-17 使用指针名加下标处理元素的方法 (2)指向其它元素 (3)强调两点 ①有两种方法可以使指针p指向a[0] 方法一是: p = a[0] 方法二是:p = a; 可以用指针名替换数组名来处理数组元素,即a[i]与p[i]完全等价 【程序6-6】使用指针名替换数组名处理数组元素。 ②若指针p指向的不是首元素a[0], 这时a[i]与p[i]不再对应,a[i]与p[0]对应 ③使用指针名加下标时下标可以出现负数 图6-17 使用指针名加下标处理元素的方法 图6-18 指针算术运算的意义 一个指针量(不管它是指针常量还是指针变量)可以进行加或减整数n运算,作用是获得了当前位置前方或后方第n个元素的地址,即指向了当前位置的前方或后方第n个元素的位置 2.指针算术运算 (1)指针与整数的加减运算 若有数组a[5],p指向了a[0],则处理数组元素的情况可以总结成表6-1 图6-19 不同类型指针的算术运算 由于不同类型的数据所占用存储空间的大小不同,因此新的地址值与指针的类型有关,可以按下列的公式计算: 新地址 = 原来的地址 ± n * 每个元素大小(字节) 【程序6-7】用指针处理一维数组 和一般变量一样,指针变量可以进行自增(++)或自减(- -)运算 作用是使指针向前或向后移动一个元素的位置 数组名是指针常量, 它不可以进行自增(++)或自减(- -)运算 指针自增、自减运算也有前置和后置之分,使用时要加以注意 要特别注意指针自增、自减运算与取间接运算混合使用时的情况 (2)指针自增/减运算 若有以下的定义和初始化: int a[5] = {1, 2, 3, 4, 5}; int *pa = a[2]; /* 指针pa指向了元素a[2] */ int b[5]; int *pb = b; /* 指针pb指向了元素b[0] */ int y; 若有以下定义: int a[5]={2, 4, 6, 8, 10}; int *p1 = a, *p2 = a[3]; 则: p2 - p1的结果是3,因为p2与p1之间跨过3个数据的位置 两个指向同一个数组的指针之间可以进行相减运算,结果是两个指针跨过该类型数据的个数 3.指针其他运算 (1)指针相减运算 两个相同类型的指针之间可以进行关系运算, 用来比较两个指针所指向内存空间的前后位置关系 (2)指针关系运算 如: if(p1 = p2) … … if(p1 != p2) … … 例 int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,i; 数组元素地址的正确表示: (A)(a+1) (B)a++ (C)p (D)p[i] ? 数组名是地址常量 p++,p-- (?) a++,a-- (?) a+1, *(a+2) (?) 例 void main() {

文档评论(0)

基本资料 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档