美文网首页
C++之数组篇

C++之数组篇

作者: 全球顶尖伪极客 | 来源:发表于2021-12-19 02:04 被阅读0次

    样例一:

    #include <stdio.h>
    
    // 数组与数组指针。
    int mainT3() {
        // 定义数组
        // int [] arr = {1,2,3,4}; 错误的写法
        int arr[]  = {1,2,3,4};
    
        // 遍历数组
        // 其他平台不能用 Clion能用, Linux上报错
        /*for (int i = 0; i < 4; ++i) {
    
        }*/
    
        // VS非常严格,规范,    CLion包容
    
        // Linux上没有问题,Clion没有问题,Mac没有问题
        int i = 0;
        for (i = 0; i < 4; ++i) {
            printf("%d\n", arr[i]); // 取值
        }
    
        // 数组 和 指针 挂钩
        // 数组的内存地址 == 第一个元素的内存地址  == &arr,下面打印结果相同
        // 数组的内存地址 == 第一个元素,不是第二个元素,也不是第n个元素
        printf("arr  =   %d\n", arr);//arr  =   9829792
        printf("&arr  =   %d\n", &arr);//&arr  =   9829792
        printf("&arr[0]  =   %d\n", &arr[0]);//&arr[0]  =   9829792
    
        // 既然数组就是一个内存地址
        int * arr_p = arr;
    
        printf("%d\n", *arr_p); // *arr_p 取出元素一内存地址的值 1
    
        arr_p ++; // 指针挪动   元素二的内存地址了
    
        printf("%d\n", *arr_p); // *arr_p 取出元素二内存地址的值 2
    
        arr_p += 2;
    
        printf("%d\n", *arr_p); // 输出4
    
        // 输出1
    
        arr_p -= 3; // 挪动指针指向到 元素一
    
        printf("%d\n", *arr_p);
    
        arr_p += 2000;
    
        printf("%d\n", *arr_p); // 系统值 572662306
    
    
        // 以后:我想 三维数组/三级指针
        // int *** arrPpp;
    
        return 0;
    }
    
    

    样例二:

    #include <stdio.h>
    
    // 3.采用指针遍历数组。
    
    int mainT4() {
    
        // 定义数组
        // int [] arr = {1,2,3,4}; 错误的写法
        int arr[]  = {1,2,3,4};
    
        // 数组是连续的内存空间(没有断层,有规律) 数组  每次挪动 4个字节 == int数组
    
        int * arr_p = arr;
    
        int i = 0;
        for (i = 0; i < 4; ++i) {
            printf("位置%d的值是:%d\n", i, * (arr_p + i));
    
            // 04    08   12    16
            printf("位置%d的内存地址是:%p\n", i, (arr_p + i));
        }
    
        return 0;
    }
    

    样例三:

    #include <stdio.h>
    
    // 4.循环时给数组赋值。
    int mainT5() {
    
        // 定义数组
        // int [] arr = {1,2,3,4}; 错误的写法
        int arr[4];
    
        int * arrP = arr;
    
        // sizeof arr == sizeof(arr)
    
        // 循环赋值操作
        int j = 0;
        for (j = 0; j < 4; ++j) {
            // 1.拿到 元素一 元素二 元素三 元素四 的内存地址   (arrP + j)
            // 2.取出 元素一 元素二 元素三 元素四 的内存地址 所对应的值 * (arrP + j)
            * (arrP + j) = (j + 10001);
        }
    
        // sizeof arr = 16(sizeof arr)  /  4(sizeof(int))
        // 变量 刚刚赋值的数组
        for (int i = 0; i <  sizeof arr / sizeof(int); ++i) {
            printf("位置%d的值是:%d\n", i, * (arrP + i));
        }
    
        return 0;
    }
    

    样例四:

    #include <stdio.h>
    
    // 5.数组指针操作的几种方式。
    int mainT6() {
    
        int arr[]  = {1,9,0,9999};
    
        int * arrP = arr;
    
        for (int i = 0; i < 4; ++i) {
            // printf("%d\n", arrP[i]);
            // printf("%d\n", *(arrP + i)); // + i 挪动元素3内存地址 再取元素3内存地址所对应的值
            // printf("%d\n", *arrP + i);  放后面解释
        }
    
        return 0;
    }
    
    
    

    样例五:

    #include <stdio.h>
    
    // 6.指针类型有何用?。
    int mainT7() {
    
        int num = 12;
    
        int * num_p = &num;
    
        // 优化处理,报错:检测无法通过的
        double * num_p_d = num_p;
    
        printf("%d\n", sizeof num_p);
        printf("%d\n", sizeof num_p_d);
    
        // 指针占用的内存大小是?  int double xxx 的指针 永远都是   4个字节(32)    4*2(64)
    
        // 6.指针类型有何用?。  既然都是 4个字节,为什么还要分 指针类型
        // 答:取值的时候,怎么取,这就是类型规定的好处
    
        // int * p; // 类型是为了计算偏移量
    
        char c = 'a';
        // char * p = &c;
        // char * p = "AAAA";
    
        return 0;
    }
    
    
    

    相关文章

      网友评论

          本文标题:C++之数组篇

          本文链接:https://www.haomeiwen.com/subject/jvmnfrtx.html