二维数组

二位数组的创建和初始化,二维数组的使用,二维数组在内存中的存储

int arr[3][4];  //表示3行4列,每个元素都是整形

#include <stdio.h>
int main() {
    //int arr[3][4];//3行4列的整形
    //初始化 - 创建的同时给赋值
    int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化
    int arr2[3][4] = { 1,2,3,4,5,6,7,8 }; //不完全初始化
    int arr3[][4] = { {1,2},{3,4},{5,6} }; //可以省略行,但不能省略列
    return 0;
}

二维数组的使用

    // 如何打印出二维数组的值
    int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++)
        {
            printf("%d ", arr1[i][j]);
        }
        printf("\n");
    }
    /*结果:
                1 2 3 4 
                5 6 7 8 
                9 10 11 12*/

二维数组在内存中的存储

二维数组在内存中也是连续存放的,每个数组地址相差为数组类型的地址大小

用途:

    // 如何打出二维数组在内存中的地址
    int arr1[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; //完全初始化
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++)
        {
            printf("arr[%d][%d]%p\n ",i,j, arr1[i][j]);
        }
        printf("\n");
    }
    /*结果:

arr[0][0]00000033AA4FF8C8
arr[0][1]00000033AA4FF8CC
arr[0][2]00000033AA4FF8D0
arr[0][3]00000033AA4FF8D4


arr[1][0]00000033AA4FF8D8
arr[1][1]00000033AA4FF8DC
arr[1][2]00000033AA4FF8E0
arr[1][3]00000033AA4FF8E4


arr[2][0]00000033AA4FF8E8
arr[2][1]00000033AA4FF8EC
arr[2][2]00000033AA4FF8F0
arr[2][3]00000033AA4FF8F4

*/

使用指针和数组结合

知识点:

对数组来说,*p是地址并且带值,p是下标,默认等于0,一维数组名就是第一个元素的地址,

对二维数组来说,得加取地址符&,因为地址是连续的,要了解清除数组的布局情况

//使用指针来计算出每个数组的值
    int arr2[2][3] = { 1,2,3,4 };
    int* p = &arr2[0][0];  //p是第零个地址,一维数组不需要加地址符,二维数组加
    for (int i = 0; i < 6; i++)
    {
        printf("%d ", *p);
        p++; //表示地址向前加一
    }/*结果:1 2 3 4 0 0
        */

如果把二维数组来当成一维数组,例如:arr[3][4]就变成了3个一维数组-->arr[0]、arr[1]、arr[2],一般考试时,习惯把二维数组当作一维数组用,和指针结合起来

posted @ 2022-10-25 17:43  king光  阅读(104)  评论(0)    收藏  举报