网站大量收购独家精品文档,联系QQ:2885784924
  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
L0817_指针2

第十章:指针(二) …… 共 8 页 如果定义p为行指针,令 p = a, 则 p+i 为第 i 行首地址, ?(p+i)为第 i 行第0个元素的地址, ?(p+i)+j 为第 i 行第j个元素的地址。 这时,需将p的定义改为 int (?p)[4]; ? *** 指向数组的每一行的指针变量 ? (?(p+i)+j) ~ a[i][j] a) 不能去掉( ), 否则为int ?p[4]为指针数组(§10.7.1) b) 之所以这样定义是为了使p+1的地址为a[1], 即: 移动4个元素。 小结 二维数组与指针(本节难点) 行指针,列指针,元素 a , a[i], a[i][j] 分别对应 行指针,列指针,元素。 语句中a[i]与?(a+i)等价 ?(p+i)+j 为第 i 行第j个元素的地址 记住: a[i][j] ~ ? (?(p+i)+j) void main ( ) { int j, a[3][4]={1, 3, 5,7, 9, 11, 13, 15,17, 19, 21, 23}; int (?p)[4]; for (p=a; pa+3; p++) { for (j=0; j4; j++) printf (%4d, ?(?p+j) ); printf(\n); } } 例10.11 (改) 利用指向数组的每一行的指针变量, 逐行逐个输出元素。 p的初值写成 p = a; 是否错? 多维数组的地址也可作函数参数传递。用指针变量作形参的两种方法: ① 用指向变量的指针变量; ② 用指向一维数组的指针变量。 3. 用指向数组的指针作函数参数 例10.13 有一个班,3个学生,各学4门课,计算总平均分数,以及第n个学生的成绩。 程序如下: void main ( ) { void average(float * p, int n ); void search (float (*p) [4], int n ); float score [3] [4]={{65, 67, 70, 60}, {80,87,90,81}, {90,99,100,98}}; average (*score, 12); /* 求12个分数的平均分 */ search( score,2); /* 求序号为2的学生的成绩 */ } * §10.3 数组与指针 前面介绍:一个变量的地址为该变量的指针。当用一个变量来存放该地址(指针)时,称为指针变量。 又有说明:一个数组元素相当于一个简单变量。于是,亦可用一个指针变量来指向数组元素。 不同点: 数组元素连续地占用内存单元,则当一个元素的指针已知时,其它元素的指针亦可知道。 定义方法与简单变量指针定义相同 例: int a[10]; int ?p; ? 定义指针变量 p p=a[0]; ?将a的第0个元素的地址?p C语言规定: 数组名表示该数组的首地址。 所以: p=a 与 p=a[0] 等价 一、指向数组元素的指针 可以在定义指针变量时赋初值: 不同于:int i, ?p ; ?p=a ;或 int i, ?p ; ?p = a[0]; × int i , ?p=a[0]; 或 int i , ?p=a ; 等价于: int i , ?p ; p=a[0]; 或 int i , ?p ; p=a; 则: p+1为a[1]的地址。 a为int,p+1相当于地址+2。 如果a为float,p+1相当于地址+4. 设有 int a[10] , ?p; p=a[0]; 一般地: p+i ? a[i] 的地址 引用a[i]的值: 下标法: a[i] , 指针法:?(p+i) 二、通过指针引用数组元素 (2) 指向数组的指针变量(本身不是数组!) 可以带下标引用a[i]的值. 语句中p[i]与 *(p+i)、a[i]、?(a+i)等价 (1) a+i 表示a[i] 的地址 ?(a+i) 引用a[i]的值 理解以下变化方式: void main( ) { int i, a[10]; for(i=0; i<

文档评论(0)

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

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

1亿VIP精品文档

相关文档