C语言 数据指针/指针数组循环

318 阅读2分钟

1. 指针数组(二级数组)

(1) 数据为指针

    int n = 36;
    int n2 = 641;
    int n3 = 15;

//    指针数组
    int *a[3] = {&n, &n2, &n3};
//    下标法
    for (int i = 0; i < 3; ++i) {
        //   第一个元素是指针,需要 * 解析地址
        printf("--------------------------%d    \n", *a[i]);
    }

    printf("-------------------------------------------\n");
    int **c = a;
//    指针法
    for (int i = 0; i < 3; ++i) {
    //    c + i 获取数组第几个元素,一个 * 解析指针数组地址,一个 * 解析元素中的地址
        printf("--------------------------%d    \n", *(*(c + i)));
        printf("--------------------------%d    \n", **(c + i));
    }

    printf("-------------------------------------------\n");
//    地址法
    for (int i = 0; i < 3; ++i) {
    //    a + i 获取数组第几个元素,一个 * 解析指针数组地址,一个 * 解析元素中的地址
        printf("--------------------------%d    \n", *(*(a + i)));
    }

(1) 数据为值

//    指针数组
    int *a[3] = {10, 20, 30};
//    下标法
    for (int i = 0; i < 3; ++i) {
        printf("--------------------------%d    \n", a[i]);
    }

    printf("-------------------------------------------\n");
    int **c = a;
//    指针法
    for (int i = 0; i < 3; ++i) {
//        c + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *(c + i));
    }

    printf("-------------------------------------------\n");
//    地址法
    for (int i = 0; i < 3; ++i) {
//        a + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *(a + i));
    }

2. 数组(一级数组)

//    数组指针
    int a[3] = {10, 20, 30};
//    下标法
    for (int i = 0; i < 3; ++i) {
        printf("--------------------------%d    \n", a[i]);
    }

    printf("-------------------------------------------\n");
    int *c = a;
//    指针法
    for (int i = 0; i < 3; ++i) {
//        c + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *(c + i));
    }

    printf("-------------------------------------------\n");
//    地址法
    for (int i = 0; i < 3; ++i) {
//        a + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *(a + i));
    }

2. 数组指针(一级数组)

    int n = 36;
    int n2 = 641;
    int n3 = 15;
    int arr[3] = {n, n2, n3};
//    数组指针
    int (*a)[3] = &arr;
//    int (*a)[3] = {181, 86, 51};
//    下标法
    for (int i = 0; i < 3; ++i) {
//        +1  是整个数组的长度  就是 3 * 4
        printf("--------------------------%d\n", (*a)[i]);
    }

    printf("-------------------------------------------\n");
    int *c = a;
//    指针法
    for (int i = 0; i < 3; ++i) {
//        c + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *(c + i));
    }

    printf("-------------------------------------------\n");
//    地址法
    for (int i = 0; i < 3; ++i) {
//        a + i 获取第几个元素, * 解析指针数组
        printf("--------------------------%d    \n", *((*a) + i));
    }