問題描述:C中指針的用法非常靈活,合理使用指針可以避免副本拷貝等。多元數組與指針的結合使用有時可以帶來許多友善。
指針處理多元數組的行:這個處理相對簡單,以二維數組為例,
int a[ROW][COL]={};
int *p;
要用p指向a的某一行,使用p=a[i]即可。
指針處理多元數組的列:比行處理稍複雜,因為數組是按行存儲而非列。以二維數組為例,
#include <stdio.h>
int main(void) {
int a[3][4]={0};
int i,j;
int (*p)[4];
for(p=a;p<=&a[2];p++)
(*p)[2]=8;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d, ",a[i][j]);
return 0;
}
運作結果:
0, 0, 8, 0, 0, 0, 8, 0, 0, 0, 8, 0,
#include<stdio.h>
int main(void)
{
inti,j;
inta[3][4]={0};
int(*p)[4];
//二維數組初始化
for(p=a;p<=a+2;p++)
for(i=0;i<4;i++)
(*p)[i]=i;
//二維數組列印
for(p=a;p<=a+2;p++)
for(i=0;i<4;i++)
printf("%d, ",(*p)[i]);
//列印**a
printf("\n **a %d\n",**a);
//利用數組名作為指針列印數組元素
for(i=0;i<3;i++)
for(j=0;j<4;j++)
printf("%d, ",*(*(a+i)+j));
}
0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,
**a 0
0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3,