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");
}

运行效果:

在这里插入图片描述

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