- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
指针的概念10.2变量的指针和指向变量的指针变量10.3指.ppt
【例】利用行指针变量求二维数组各列之和。 #define M 3 #define N 4 main( ) { int a[M][N], i, j, sum, (*p)[N]; p=a; /*p保持指向首行*/ for(i=0; iM; i++) for(j=0; jN; j++) scanf(%d, *(p+i)+j); for(i=0; iM; i++) /*按行输出数组*/ { for(j=0; jN; j++) printf(%4d, *(*(p+i)+j)); printf(\n); } for(j=0; jN; j++) /*按列求和并输出*/ { for(sum=0,i=0;iM;i++) sum=sum+*(*(p+i)+j); printf(%d Col: sum=%d\n, j+1, sum); } } YS 4) 用指针在函数间传递二维数组的地址 主调和被调函数需对同一个数组操作时,不仅应 将数组的指针作为函数的参数,而且还要保证实参与 形参的指针单位要一致。 实参与形参的对应关系: 二维数组元素的指针 二维数组名带1个下标 二维数组行的指针 指向数组行的指针变量 (数组名 / 数组名+i ) 元素的指针 行指针量 实参 形参 变量的指针变量 【例】对3名学生4门课成绩按人求平均分;并找出两门 以上不及格的学生,输出其全部成绩。 #define N 3 #define M 6 main( ) { void average(float *p), find(float (*p)[M]); void pscore(float (*score)[M]); int i, j; float score[N][M]= {{1,80,87,90,83}, {2,56,72,78,44},{3,90,85,100,98}}; average(score[0][0]); /*实参:元素的指针*/ pscore(score); /*实参:行指针*/ find(score); } /*实参:行指针*/ ┇ void average(float *p) { int i, j; for(i=0; iN; i++) { for(j=1; jM-1; j++) /*按行累加个人成绩*/ *(p+i*M+(M-1))+=*(p+i*M+j); *(p+i*M+(M-1))/=M-2; } } void pscore(float (*score)[M]) /*or(float score[][M])*/ { int i, j; printf(score list:\n); for(i=0; i3; i++) /*按行输出所有成绩*/ { printf(No.%.0f, **(score+i)); /**(*(score+i)+0)*/ for(j=1;jM;j++) printf(%7.2f, *(*(score+i)+j)); printf(\n); } } void find(float (*p)[M]) { int i, j, flag; printf(\nfind output:\n); for(i=0; iN; i++) { flag=0; for(j=1; jM-1; j++) if(*(*(p+i)+j)60)flag++; /*flag:不及格门次*/ if(flag=2) /*输出两门以上不及格的成绩*/ { printf(No.%.0f, *(*(p+i)+0)); for(j=1; jM; j++) printf(%7.2f, *(*(p+i)+j)); printf(\n); } } } YS 10.3 指针和数组 数组只能按元素进行访问,访问的方法有: 下标法:较直观;但需依据数组起始地址和下标值 换算出元素的地址; 指针法:利用指针变量对数组元素间接访
文档评论(0)