天天看點

[Pointer]C中指針與多元數組學習

   問題描述: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,