第2讲 二维数组和指针.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2讲 二维数组和指针

第2讲 二维数组与指针;复习:一维数组元素及其地址表示;复习:指向一维数组元素的指针;复习:指向一维数组元素的指针;#include stdio.h #define N 6 void main( ) { int a[N]={ 1, 3, 4, 6, 7, 9 }; int temp, m=(N-1)/2; int *p , *q , *t ; p=a; q=a+N-1; t=a+m; for( ; p=t; p++, q-- ) { temp=*p; *p=*q; *q=temp; } for( p=a; pa+N; p++ ) printf(“%3d”, *p ); printf(“\n”); };二维数组的地址;a[0][0];二维数组的地址;;a+1与a[0]+1是不同的:a+1是序号为1的行的首地址,指向序号为1的行(相当于排长走到序号为1班的第一个战士位置);而a[0]+1是指向0行1列元素(相当于序号为0班的第1个战士)。 a、a[0]的值虽然相同,但是由于指针的类型不同(相当于排长和班长面对的对象一样,但意义不同),a是指向一维数组,a[0]指向a[0][0]元素,因此,进行加1运算,得到的结果是不一样的。 二维数组a是指向行的。在指向行的指针前面加一个*,就转换为指向列的指针。反之,在指向列的指针前面加一个,就转换为指向行的指针。;例如:a和a+1是指向行的指针 *a和*(a+1)是指向列的指针,分别指向a数组0行0列 的元素和1行0列的元素;小结:二维数组的地址分为行地址和列地址;指向二维数组的指针变量;指向二维数组元素的指针;2026;指向二维数组元素的指针;指向二维数组的指针变量;;#include stdio.h void inv1( int x[ ] , int n ) { int temp, i , j , m=(n-1)/2; for( i=0; i=m; i++) { j=n-1-i ; temp=x[i] ; x[i]=x[j]; x[j]=temp ; } } void main( ) { int i , a[6]={ 1, 3, 4, 6, 7, 9 }; inv1(a , 6 ); for( i=0; i6; i++ ) printf(“%3d”, a[i] ); printf(“\n”); };例:②实参用数组名,形参用指针变量 #include stdio.h void inv2(int *x , int n) { int temp, m=(n-1)/2; int *p , *i , *j ; i=x ; j=x+n-1; p=x+m; for( ; i=p ; i++, j-- ) { temp=*i; *i=*j; *j=temp; } } void main( ) { int i , a[6]={ 1, 3, 4, 6, 7, 9 }; inv2(a , 6 ); for( i=0; i6; i++ ) printf(“%3d”, a[i] ); printf(“\n”); };用指向数组的指针作函数参数;#include stdio.h 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); search(score , 2); };问题1、*a和a的值是否一样?为什么?;问题2 、为什么不能用二级指针**p指向二维数组a[2][4]?而必须用指向一维数组的指针(*p)[4]指向呢?;注意: 上面定义的指针变量p所指的对象是有4个整形元素组成的数组,即p是指向一维数组的指针。 p的值就是该一维数组的起始地址(p=a[0]),p不能指向一维数组中的某个元素。 p+1就指向下一个一维数组了(p+1=a[1]) 。 若要用指针p表示标号为2行3列的数组元素,则结果为*(*(p+2)+3) 。;指向一维数组的指针

文档评论(0)

sy78219 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档