數組指針
int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; //3個a[4]的一維數組
//定義數組指針變量
//指向一維數組的整個數組首地址
int (*p)[4];
//p = &a; //整個二維數組首地址 結果和p = a;一樣
p = a; //第0行首地址
printf("p:%d,p+1:%d",p,p+1); //會發現打印出來的p的地址和p+1的地址相差4*4=16
首行首元素地址和首行首地址區別
a:代表第0行首地址
a+i(或&a[i]):代表第i行首地址
*(a+i)(或者a[i]):代表第i行首元素地址
*(a+i)+j(或者&a[i][j]):代表第i行第j列元素的地址
((a+i)+j)(或者a[i][j]):代表第i行第j列元素的值
二維數組作爲函數參數
利用數組指針作形參
void printArray(int (*a)[4])
{
int i =0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%d",a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
printArray(a);
printf("\n");
return 0;
}
用typedef定義數組指針類型
c
typedef int (*P)[10]; //數組指針類型
P p; //用定義的數組指針類型P來定義數組指針變量p
也可以用typedef來定義數組類型:
“`c
typedef int A[10]; //A:數組類型
A b; //等價於int b[10],數組類型變量,普通變量
A *p; //也就是int (*p)[10],數組類型定義數組指針變量