• 【C++之数组与指针】随机输入整数存入数组并用指针遍历


    本题收录于 牛客网 在线编程-语法篇-C++入门-02复合类型-指针-CPP26 / C语言入门-01指针-CC4
    记得大一那会儿学校上C语言课,从指针开始后面就没学了😥
    在这里插入图片描述

    题目

    描述:

    键盘随机输入 6 个整数,将这些数据保存到数组中,利用指针遍历数组中的元素并打印。

    输入描述:

    键盘随机输入 6 个整数

    输出描述:

    输出数组中的所有元素,每个元素中间使用空格隔开
    例如:10 20 30 40 50 60
    示例1
    输入:

    10
    20
    30 
    40
    50
    60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输出:

    10 20 30 40 50 60
    
    • 1

    初始代码:

    #include 
    using namespace std;
    
    int main() {
    
        int arr[6] = { 0 };
        int* ptr = arr;
    
        int len = sizeof(arr) / sizeof(int);
    
        for (int i = 0; i < len; i++) {
            cin >> arr[i];
        }
    
        // write your code here......
        
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    数组与指针

    数组

    一维数组声明语句格式:

    类型名 数组名[数组元素个数]
    
    • 1

    数组元素的表现形式是 数组名+方括号"[ ]" ,括号里面为该元素在数组里的位置,称为 数组元素的下标

    数组在声明的同时可以进行初始化,初始化的值用 大括号“{ }” 括起来。

    • 初始化时,大括号内的值会从下标为0的元素开始,依次赋值给数组元素。
    • 所有全局数组和静态数组的每个元素在编译时默认被设为0。
    • 如果初始化的数值个数少于方括号中声明的元素个数,则初始化按实际值的个数进行,除了局部数组(剩余元素不确定)外,全局数组和静态数组剩余的元素被初始化为0。
    • 如果初始化的数值个数多于方括号中声明的元素个数,则会报错。

    本题中的数组声明和初始化:

    int arr[6] = { 0 };
    
    • 1

    表示数组名为 arr ,有6个元素,每个元素为整型数,第一个元素初始化指定为0,其余5个元素也会被置为0。

    通过数组元素的下标值可以访问数组元素。

    本题中的访问数组元素:

    int len = sizeof(arr) / sizeof(int); # 计算数组长度
    for (int i = 0; i < len; i++) {
    	cin >> arr[i];
    }
    
    • 1
    • 2
    • 3
    • 4

    利用数组元素的下标值依次输出数组所有元素的值。

    注意数组元素的下标是从0开始的,因此具有6个元素的数组,下标有效范围为0-5.

    指针

    指针的使用可以直接访问程序数据的地址,省略通过变量名转换的过程,从而提高效率。

    数组的起始地址即数组第一个元素的地址。数组一旦分配好空间,起始地址就确定了。不带下标的数组名就代表了数组的起始地址。例如 arr 就代表了 arr[0] 。

    当指针指向数组的具体地址时,就可以用 运算符 “*” 来访问数组的每一个元素。

    本题中的指针指向数组的起始地址:

    int* ptr = arr;
    
    • 1

    这里 * ptr 表示被 ptr 指向的变量,即数组 arr[0] ,也就是说 ptr 指针指向数组 arr 的起始地址。

    如果要访问除第一个元素外的其他元素,可以采用表达式 *(ptr+i) ,这里的 i 表示偏移量,即当前地址向后偏移 i 个位置,对应一个单位量而非字节。注意偏移不能越界。

    使用指针和下标访问的对应关系:

    数组元素位置下标访问指针访问
    0arr[0]* ptr
    1arr[1]* (ptr+1)
    2arr[2]* (ptr+2)
    3arr[3]* (ptr+3)
    4arr[4]* (ptr+4)
    5arr[5]* (ptr+5)

    题解

    此题属于入门题
    输入:

    10
    20
    30 
    40
    50
    60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代码1:

    不用指针遍历,直接用数组下标访问

    #include 
    using namespace std;
    
    int main() {
    
        int arr[6] = { 0 };
        int* ptr = arr;
    
        int len = sizeof(arr) / sizeof(int);
    
        for (int i = 0; i < len; i++) {
            cin >> arr[i];
        }
    
        for (int i = 0; i < len; i++) {
            cout << arr[i] << " ";
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    代码2:

    使用指针遍历访问

    #include 
    using namespace std;
    
    int main() {
    
        int arr[6] = { 0 };
        int* ptr = arr;
    
        int len = sizeof(arr) / sizeof(int);
    
        for (int i = 0; i < len; i++) {
            cin >> arr[i];
        }
    
        for (int i = 0; i < len; i++) {
            cout << *(ptr+i) << " ";
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    两种访问元素的方式的输出结果都一样。

    输出:

    10 20 30 40 50 60
    
    • 1
  • 相关阅读:
    【C】程序环境和预处理
    二叉树习题
    java预备知识
    【Java第35期】:Bean的生命周期
    神经网络 深度神经网络,深度神经网络的深度
    FPGA解析B码----连载8(完结篇)
    python setup error: [WinError 2] 系统找不到指定的文件
    振弦传感器表面应变计与振弦采集仪形成岩土工程监测的解决方案
    SpringCloud——Hystrix(服务雪崩、简介、快速入门)
    vue是怎么初始化数据并挂载的?
  • 原文地址:https://blog.csdn.net/weixin_43470383/article/details/126651643