#include "stdio.h"

int main()
{
    //定义一个三维数组
    int arr1[] = {1,2,3};
    int arr2[] = {1,2,3,4,5};
    int arr3[] = {1,2,3,4,5,6,7,8,9};
    //把三个一维数组放入二维数组中
    //数组的数据类型,需要跟内部存储的元素类型保持一致
    //arr1:使用数组名进行计算的时候,退化为指向第一个元素的指针,此时不再表示数组的那个整体了;
    int* arr[] = { arr1, arr2, arr3};
    //int len1 = sizeof(arr1) / sizeof(int);
    //int len2 = sizeof(arr2) / sizeof(int);
    //int len3 = sizeof(arr3) / sizeof(int);
    //printf("len1 = %d\n", len1);
    //printf("len2 = %d\n", len2);
    //printf("len3 = %d\n", len3);
    //int len4 = sizeof(arr[1]) / sizeof(int);
    //int len5 = sizeof(arr[2]) / sizeof(int);
    //int len6 = sizeof(arr[3]) / sizeof(int);
    //printf("len4 = %d\n", len4);
    //printf("len5 = %d\n", len5);
    //printf("len6 = %d\n", len6);
    int len1 = sizeof(arr1) / sizeof(int);
    int len2 = sizeof(arr2) / sizeof(int);
    int len3 = sizeof(arr3) / sizeof(int);
    int arrlen[] = { len1,len2,len3 };
    for (int i = 0;i < 3;i++)
    {
        for (int j = 0;j < arrlen[i];j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;

}
  1. arr 数组的定义与存储内容
    arr 被定义成一个指针数组,其每个元素都是指向整数数组的指针。
    arr[0] 指向 arr1 数组的起始地址,arr[1] 指向 arr2 数组的起始地址,arr[2] 指向 arr3 数组的起始地址
  2. ar[i] [j] 的访问原理
    arr[i] :当你使用 arr[i] 时,实际上是从 arr 数组里取出第 i 个元素,而这个元素是一个指向整数数组的指针。例如,arr[0] 就是指向 arr1 数组起始地址的指针。
    arri :在得到 arr[i] 这个指针之后,arri 就相当于 *(arr[i] + j)。也就是说,先找到第 i 个整数数组的起始地址,然后偏移 j 个位置,最后取出该位置上的元素。
#include <stdio.h>

int main() {
    int arr1[] = {1,2,3};
    int arr2[] = {1,2,3,4,5};
    int arr3[] = {1,2,3,4,5,6,7,8,9};
    int* arr[] = { arr1, arr2, arr3};

    // 访问 arr1 的第二个元素
    printf("arr1[1] = %d\n", arr[0][1]);

    // 访问 arr2 的第三个元素
    printf("arr2[2] = %d\n", arr[1][2]);

    // 访问 arr3 的第四个元素
    printf("arr3[3] = %d\n", arr[2][3]);

    return 0;
}

在这个示例中,arr[0] [1] 访问的是 arr1 数组的第二个元素,arr[1] [2] 访问的是 arr2 数组的第三个元素,arr[2] [3] 访问的是 arr3 数组的第四个元素。
综上所述,由于 arr 是一个指向整数数组的指针数组,因此可以使用 arr[i] [j] 这种形式来访问数组元素。


YingLi
6 声望4 粉丝

From zero to hero.