C語言中的普通指針與數組指針的區別?

實現代碼:

#include <stdio.h>

void main() {
    int a[2][5] = {{1, 2, 3, 4, 5},
                   {6, 7, 8, 9, 10}};
    int (*p1)[5] = a;       // 數組指針,等同 p1 = &a[0];
    int *p2 = a[0];         // 一般指針,等同 p2 = &a[0][0];
    int i, j;

    printf("a        = %p\n", a);        // a       類型是 int (*)[5]
    printf("&a       = %p\n", &a);       // &a      類型是 int (*)[2][5]
    printf("a[0]     = %p\n", a[0]);     // a[0]    類型是 int *
    printf("&a[0]    = %p\n", &a[0]);    // &a[0]   類型是 int (*)[5]
    printf("a[0][0]  = %d\n", a[0][0]);  // a[0][0] 類型是 int
    printf("&a[0][0] = %p\n", &a[0][0]); // &a[0][0]類型是 int *
    printf("\n");

    /*利用數組指針*p1遍歷數組輸出*/
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            printf("a[%d][%d] = %d\t", i, j, *(*(p1 + i) + j));
        }
        printf("\n");
    }
    printf("\n");

    /*利用一般指針*p2遍歷數組輸出*/
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            printf("a[%d][%d] = %d\t", i, j, *p2++);
        }
        printf("\n");
    }
    printf("\n");
}

運行效果:

在這裏插入圖片描述

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