C++之数组篇

2021-12-19  本文已影响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;
}


上一篇下一篇

猜你喜欢

热点阅读