二维数组

2022-10-07  本文已影响0人  arkliu

二维数组数组名

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

int main() {
    // a代表第0行首地址
    // a+i代表第i行首地址  等价于  a[i]
    // *(a+i) 代表第i行首元素地址
    // *(a+i)+j 第i行第j列的地址  等价于  &a[i][j]
    // *(*(a+i)+j) 第i行第j列的地址的值 等价于 a[i][j]
    int a[3][4] = {
        {1,2,3,4},
        {5,6,7,8},
        {9,10,11,12}
    };
    
    int a2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

    int a3[][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

    int i=0;
    for (; i < 3; i++)
    {
        for (int j=0;j < 4; j++)
        {
            printf("%d  ", a[i][j]);
        }
        printf("\n");
    }
    
    // 二维数组名代表第0行的首地址(区别于第0行首元素地址,虽然值一样,但是步长不一样)
    printf("a = %d a+1 = %d\n", a, a+1); //a = 6421984 a+1 = 6422000  +16

    printf("%d  %d\n", *(a+0), *(a+1)); // 6421984  6422000   +16  *(a+0)是第0行首元素的地址
    printf("%d  %d\n", *(a+0), *(a+0)+1); // 6421984  6421988  +4
    printf("%d  %d\n", a[0], a[0]+1); // 6421984  6421988  +4
}
上一篇下一篇

猜你喜欢

热点阅读