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

运行效果:

在这里插入图片描述

展开阅读全文
©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值