指針數組和數組指針的詳細解答

/**首先弄明白什麼是指針數組,什麼又是數組指針。
    指針數組:
        類型名  *數組名[數組長度]
        如:  int *p[8];
    因爲優先級的關係,p先與[]結合,說明p是一個數組,然後再與*結合數組p
    的元素是指向整型數據的指針。相當於定義了8個整型指針變量。在此,p就是
    數組元素爲指針的數組,本質爲數組。

    數組指針:
        類型名 (*指針名)[數組長度]
        如:int (*p)[8];
    p先與*號結合,形成一個指針,該指針指向的是有8個整型元素的數組,
    p即爲指向數組首元素地址的指針,其本質爲指針。

**/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int arr[4][4];
    int i,j,k=0;
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            arr[i][j]=k;
            k++;
        }
    }
    int *p1[4];
    int (*p2)[4];

    for(k=0;k<4;k++){
        p1[k]=arr[k];
    }

    printf("\n使用指針數組的方式訪問二維數組arr\n");

    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            printf("arr[%d][%d]=%d\t",i,j,*(p1[i]+j));
            ///p1[i]+[j]即第i行第j列的元素地址
        }
    }
    printf("\n-----------------------------------\n");
    p2=arr;
    printf("\n使用數組指針的方式訪問二維數組arr\n");

    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            printf("arr[%d][%d]=%d\t",i,j,*(*(p2+i)+j));
        }
    }


    return 0;
}




運行結果: 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章