《维数组与指针的讲解.ppt》由会员分享,可在线阅读,更多相关《维数组与指针的讲解.ppt(31页珍藏版)》请在三一办公上搜索。
1、好好考(),全国计算机等级考试二级C语言,第12讲 二维数组与指针,二维数组的定义数组元素的引用及初始化二维数组和指针二维数组名和指针数组作为实参二维数组程序举例真题分析,第一节 二维数组的定义,定义形式:数据类型数组名常量表达式1常量表达式2数组元素的存放顺序内存是一维的按行序优先,如:int a32;,int a32,a01,a10,a11,a20,a21,a00,a00 a01a10 a11a20 a21,例 int a34;,二维数组的理解:特殊的一维数组,每个元素ai各包含4个元素分别为:ai0,ai1,ai2,ai3,二维数组a由3个元素组成:a0、a1、a2,a01,a02,a0
2、3,a10,a11,a00,a13,a20,a21,a22,a23,a12,a0,a1,a2,分行全部初始化,第二节 二维数组的初始化及引用,第二节 二维数组的初始化及引用,分行部分初始化,分行初始化,省略第一维的大小,第二节 二维数组的初始化及引用,按元素排列顺序初始化,第二节 二维数组的初始化及引用,按元素排列顺序部分初始化,第二节 二维数组的初始化及引用,按元素排列顺序初始化,省略第一维大小,第二节 二维数组的初始化及引用,引用形式 数组名下标下标,第二节 二维数组的初始化及引用,如:int a23;可以引用的数组元素有:a00,a01,a02,a10,a11,a12;,二维数组的地址,
3、对于一维数组:(1)数组名array表示数组的首地址,即array0的地址;(2)数组名array是地址常量(3)array+i是元素arrayi的地址(4)arrayi*(array+i),第三节 二维数组和指针,对于二维数组:(1)a是数组名。(2)包含三个元素:a0,a1,a2。每个元素ai又是一个一维数组,包含4个元素:ai0、ai1、ai2、ai3,int a34;,二维数组的地址,对二维数组 int a34,有a-二维数组的首地址,即第0行的首地址a+i-第i行的首地址ai*(a+i)-第i行第0列元素的地址ai+j*(a+i)+j-第i行第j列元素的地址*(ai+j)*(*(a+
4、i)+j)aij,a+i&ai,表示第i行首地址,指向行ai*(a+i)&ai0,表示第i行第0列元素地址,指向列,2000,2004,2010,2014,2020,2024,a,a+1,a+2,二维数组的地址,二维数组元素表示形式:(1)a12(2)*(a1+2)(3)*(*(a+1)+2)(4)*(&a00+1*4+2),首元素地址表示:(1)a+1(2)&a10(3)a1(4)*(a+1),行指针,列指针,int a34;,元素地址表示:(1)&a12(2)a1+2(3)*(a+1)+2(4)&a00+1*4+2,二维数组的地址,二维数组的地址,指向二维数组元素的指针变量,例 指向二维数
5、组元素的指针变量,main()static int a34=1,3,5,7,9,11,13,15,17,19,21,23;int*p;for(p=a0;pa0+12;p+)if(p-a0)%4=0)printf(n);printf(%4d,*p);,通过指针数组来引用二维数组元素,若有以下定义:int*p3,a34,i,j;,表示p是一个数组名,该数组类型为指针类型,即数组的3个元素均为指针类型的数据。注意:int*p4与int(*p)4代表不同的含义。,指针数组用法举例,main()static int a34=1,3,5,7,9,11,13,15,17,19,21,23;int i,j,*
6、p3;for(i=0;i3;i+)pi=ai;for(j=0;j4;j+)printf(%d,*(pi+j);printf(n);,pij,p0=*a;p0=,*(ai+j),aij,定义形式:数据类型(*指针名)数组大小如:int(*p)4;,()不能少int(*p)4与int*p4不同,p的值是一维数组的首地址,p是行指针,可让p指向二维数组的某一行 如:int a34,(*p)4=a;,一维数组指针变量维数和二维数组列数必须相同,通过指向一维数组的指针变量来引用数组元素,一维数组指针变量维数和二维数组列数必须相同,a00,a01,a10,a11,a20,a21,a02,a03,a12,a
7、13,a22,a23,p,p+1,p+2,p0+1或*p+1,p1+2或*(p+1)+2,*(*p+1)或(*p)1,*(*(p+1)+2),int a34,(*p)4=a;,通过指向一维数组的指针变量来引用数组元素,int a34,(*p)4;p=a;,main()static int a34=1,3,5,7,9,11,13,15,17,19,21,23;int i,j,(*p)4;for(p=a,i=0;i3;i+,p+)for(j=0;j4;j+)printf(%d,*(*p+j);printf(n);,a00,a01,a10,a11,a20,a21,a02,a03,a12,a13,a2
8、2,a23,p,p,p,*(*a+j),p0j,通过指向一维数组的指针变量来引用数组元素,若 int a34,(*p1)4=a;,第四节 二维数组名和指针数组作为实参,指针的数据类型小结,第五节 二维数组程序举例,将二维数组行列元素互换,存到另一个数组中,1:a00,b002:a01,b103:a02,b204:a10,b015:a11,b116:a12,b21,真题分析,2008年4月(24)以下错误的定义语句是()。A)int x 3=0,1,1,2,3;B)int x43=1,2,3,1,2,3,1,2,3,1,2,3;C)int x4=1,2,3,1,2,3,1,2,3,1,2,3;D
9、)int x 3=1,2,3,4;,答案:C,真题分析,2008年4月(26)若有定义:int a23;,以下选项中对a 数组元素正确引用的是()。A)a2!1 B)a23C)a 03 D)a12!1,答案:D,真题分析,2008年9月(35)有以下程序#include#define N 4void fun(int a N,int b)int i;for(i=0;iN;i+)bi=aii;main()int x N=1,2,3,4,5,6,7,8,9,10,yN,i;fun(x,y);for(i=0;iN;i+)printf(%d,yi);printf(n);程序的运行结果是()。A)l,2,
10、3,4,B)1,0,7,0,C)1,4,5,9,D)3,4,8,10,答案:B,2 3 0 0 0 0 6 7 89 10 0 0,真题分析,2008年9月(36)有以下程序#include int fun(int(*s)4,int n,int k)int m,i;m=s0k;for(i=l;im)m=sik;return m;main()int a44=1,2,3,4),11,12,13,14,2l,22,23,24,31,32,33,34;printf(%dn,fun(a,4,0);程序的运行结果是()。A)4 B)34 C)31 D)32,答案:C,2 3 411 12 13 14 21 22 23 2431 32 33 34,真题分析,2008年9月(12)以下程序按下面指定的数据给x 数组的下三角置数,并按如下形式输出,请填空。43 72 6 91 5 8 10,答案:【12】i【13】n,#include main()int x44,n=0,i,j;for(j=0;j=j;【12】)n+;xij=【13】;for(i=0;i4;i+)for(j=0;j=i;j+)printf(%3 d,xij);printf(n);,知识点分析,题型:上机、笔试都有。重点掌握:二维数组的定义、元素的引用及初始化的方法用指针表示对二维数组元素及其地址的方法数组名做函数的参数,