C语言:二维数组与指针小程序

来源:互联网 发布:爱普生t50清零软件 编辑:程序博客网 时间:2024/05/23 23:09

二维数组与指针

要点:


    1.a:数组首元素地址,a数组首元素本身包括两个int的数组,所以a是包含两个int数组的地址。

    2.a[0]:与首元素地址&a[0][0]相同。

    3.a[0]是一个整数大小对象的地址,a是两个整数大小对象的地址,由于它们始终开始于同一个地址,所以a[0]和a数值相同。

    4.a对应首元素a[0]地址,由于a[0]本身是地址,所以对a取值:**a


下面来看一个实际的程序:

        int a[4][2] = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};

        printf("a    = %p         a + 1 = %p\n", a, a + 1);

        printf("a[0] = %p      a[0] + 1 = %p\n", a[0], a[0] + 1);

        printf("*a   = %p        *a + 1 = %p\n", *a, *a + 1);

        printf("a[0][0]         = %d\n", a[0][0]);

        printf("*a[0]           = %d\n", *a[0]);

        printf("**a             = %d\n", **a);

        printf("*(a[0] + 1)     = %d\n", *(a[0] + 1));

        printf("a[2][1]         = %d\n", a[2][1]);

        printf("*(*(a + 2) + 1) = %d\n", *(*(a + 2) + 1));

        printf("*(*(a + 2))     = %d\n", *(*(a + 2)));


输出结果为下:


a    = 0x7fff5fbff7a0         a + 1 = 0x7fff5fbff7a8     // a和a[0] 均表示地址,然而它们+1后的值不同,正是验证了要点3

a[0] = 0x7fff5fbff7a0      a[0] + 1 = 0x7fff5fbff7a4

*a   = 0x7fff5fbff7a0        *a + 1 = 0x7fff5fbff7a4    // a表示数组首元素a[0]地址,*a便表示数组首元素a[0]地址的值,而a[0]又是a[0][0]地址,即a[0]=&a[0][0];所以*a也是地址

a[0][0]         = 1

*a[0]           = 1  //因为a[0] = &a[0][0]

**a             = 1  //地址的地址a,取两次值

*(a[0] + 1)     = 2

a[2][1]         = 6

*(*(a + 2) + 1) = 6 //利用指针寻址

*(*(a + 2))     = 5


看明白这个程序,二维数组与指针就有了更加清晰的认识。

0 0