①要注意指向数组的指针变量的当前值,因为指针可以 指向数组最后一个元素以后的内存单元。 ②要注意指针变量的运算。如果p指向数组a(即p=a), 则: p++(或p+=1表示p指向下一个元素;*p表示取得当 前所指元素之值。 *p++等价于*(p++),相当于a[++]表示先*p,再p+1→p *p--等价于*p--)相当于a[--]表示先*p,再p-1→p。 “(++p)相当于a++,表示p+1→p,再p (--p)相当于a-,表示p-1→p,再*p。 (p)++表示p所指之元素的值加1,不是指针值加1。 即a[]+1
要注意指向数组的指针变量的当前值,因为指针可以 指向数组最后一个元素以后的内存单元。 要注意指针变量的运算。如果 p 指向数组 a(即p=a), 则: • p++(或p+=1)表示p指向下一个元素;*p 表示取得当 前所指元素之值。 • *p++等价于*(p++),相当于a[i++],表示先*p,再p+1p。 • *p––等价于*(p––),相当于a[i––],表示先*p,再p–1p。 • *(++p) 相当于a[++i],表示p+1p,再*p。 • *(––p) 相当于a[––i],表示p–1p,再*p。 • (*p)++ 表示 p 所指之元素的值加1,不是指针值加1。 即a[i]+1
3.指向多维数组的指针和指针变量 设二维数组a定义如下 static int a3[4]={13,5,7,{9,11,13,15},{17,1921,23} ①a代表整个二维数组的首地址,也就是0行的首地址。 a+1、a+2分别代表1行和2行的首地址。同样,a[o或 &a[o0]、a们或&a[们[0]、a[2]或&a[2[0]也分别代 表0行、1行、2行的首地址。 ②a[0等价于*a+0)、可们等价于*(a+1),…,a等价于 *(a+)。因此,a[0]+1和a+0)+1的值都是&aoj1]; a]+2和+(a+1)+2的值为&a1[2] (a+1)+2不能写成(a+1+2)否则就变成a+3),即a3]。 ③因ao]+1和*(a+0)+1是a[o][门]的地址,则*a[]+1)就是 a[o][们的值,同理,*((a+0)+1)或*a1是a[o]们的 值,*(a[]+j或*((a+)+j)是a[j[j的值。 务必记住:(a+i)和a[]是等价的
3. 指向多维数组的指针和指针变量 设二维数组 a 定义如下: static int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}}; a代表整个二维数组的首地址,也就是0行的首地址。 a+1、a+2分别代表1行和2行的首地址。同样,a[0]或 &a[0][0]、a[1]或&a[1][0]、a[2]或&a[2][0] 也分别代 表0行、1行、2行的首地址。 a[0]等价于*(a+0)、a[1]等价于*(a+1), ,a[i]等价于 *(a+i)。因此,a[0]+1和*(a+0)+1的值都是&a[0][1]; a[1]+2和*(a+1)+2的值为&a[1][2]。 *(a+1)+2不能写成*(a+1+2),否则就变成*(a+3), 即a[3]。 因a[0]+1和*(a+0)+1是a[0][1]的地址, 则*(a[0]+1)就是 a[0][1]的值, 同理,*(*(a+0)+1) 或 *(*a+1)是a[0][1]的 值,*(a[i]+ j)或*(*(a+i)+j )是a[i][ j]的值。 务必记住:*(a+i) 和 a[i] 是等价的
④如果a是一维数组名,则a[订]代表第计1个元素所占的 内存单元。但如果a是二维数组,则a[订代表一维数组 名,a[]本身是不占用内存单元的,也不存放元素值, 而只是一个地址。 而*a[i]+j)、*(a+)是二维数组元素a]j的值。 static int a[3]41=1,35,7%,{9,1113,154t17,1921,23 表示形式 含义 地址 a 维数组名,数组首地址2000 a[o], (a+0),*a 0行0列元素地址 2000 a+1 1行首地址 2008 a1],、ta+1) 1行0列元素地址 2008 a1+2,a+)+2,&a12]12列元素地址 2012 (a们]+2)(a+1)+2),a们[21行2列元素的值元素值为13
如果a是一维数组名,则a[i]代表第i+1个元素所占的 内存单元。但如果a是二维数组,则a[i]代表一维数组 名,a[i]本身是不占用内存单元的, 也不存放元素值, 而只是一个地址。 a、a+i、a[i]、 *(a+i)、 *(a+i)+j、a[i]+j都是地址, 而*(a[i]+j)、 *(*(a+i)+j)是二维数组元素a[i][ j]的值。 表示形式 a a[0],*(a+0),*a a+1 a[1], *(a+1) a[1]+2, *(a+1)+2, &a[1][2] *(a[1]+2),*(*(a+1)+2),a[1][2] 含义 二维数组名, 数组首地址 0行0列元素地址 1行首地址 1行0列元素地址 1行2列元素地址 1行2列元素的值 地址 2000 2000 2008 2008 2012 元素值为13 static int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};