1. 定义:int a[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用五种形式引用。
它们是:
(1)a[i][j] //普通调用
(2)*(a[i]+j)
(3)*(*(a+i)+j) //把二维数组看做一维数组的堆叠,*(a+i)指的是第i行。因为还要看第j列,所以整个式子最外层还有一个*
(4)(*(a+i))[j] //同(3)只是第j列的表达方式不同,
(5)*(a+5*i+j) //5*i指的是第i行
也可以表示成 a[n*i+j]
2.指针因为本身指向地址,所以
scanf("%d",*p)=scanf("%d",& p)
3.行指针与列指针的区别
行指针: *p [N]
注意:
1.行指针必须规定列数[N] 因为使用行指针还是把原数组看做二维数组来看待
2.因为必须规定列数,造成若要是修改二维数组时,每次都要改变N值费时费力,如果N规定的过大而数组没有N列的话,有部分已开辟的内存未使用,造成浪费
列指针: *p
1.不必规定N,因为使用列指针时把二维数组当做一维数组来看
指针与指针相减得一地址(两个指针在同一数组内)可用来计算数组长度
ps:可结合列指针