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

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

本题收录于 牛客网 在线编程-语法篇-C++入门-02复合类型-指针-CPP26 / C语言入门-01指针-CC4

记得大一那会儿学校上C语言课,从指针开始后面就没学了😥

题目

描述:

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

输入描述:

键盘随机输入 6 个整数

输出描述:

输出数组中的所有元素,每个元素中间使用空格隔开

例如:10 20 30 40 50 60

示例1

输入:

10
20
30 
40
50
60

输出:

10 20 30 40 50 60

初始代码:

#include <iostream>
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;
}

数组与指针

数组

一维数组声明语句格式:

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

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

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

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

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

int arr[6] = { 0 };

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

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

本题中的访问数组元素:

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

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

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

指针

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

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

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

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

int* ptr = arr;

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

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

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

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

题解

此题属于入门题

输入:

10
20
30 
40
50
60

代码1:

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

#include <iostream>
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;
}

代码2:

使用指针遍历访问

#include <iostream>
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;
}

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

输出:

10 20 30 40 50 60
相关文章
|
19天前
|
存储 Java C++
C++ 引用和指针:内存地址、创建方法及应用解析
C++中的引用是现有变量的别名,创建时需用`&`运算符,如`string &meal = food;`。指针存储变量的内存地址,使用`*`创建,如`string* ptr = &food;`。引用必须初始化且不可为空,而指针可初始化为空。引用在函数参数传递和提高效率时有用,指针适用于动态内存分配和复杂数据结构操作。选择使用取决于具体需求。
38 9
|
2天前
|
存储 C++
【C++模板】模板实现通用的数组
【C++模板】模板实现通用的数组
|
7天前
|
C++
【C++11(三)】智能指针详解--RAII思想&循环引用问题
【C++11(三)】智能指针详解--RAII思想&循环引用问题
|
7天前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
9 0
|
7天前
|
存储 人工智能 C++
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
【重学C++】【指针】详解让人迷茫的指针数组和数组指针
26 1
|
7天前
|
存储 人工智能 编译器
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
【重学C++】【指针】一文看透:指针中容易混淆的四个概念、算数运算以及使用场景中容易忽视的细节
17 1
|
7天前
|
存储 C语言
指针数组作为main函数的形参
指针数组作为main函数的形参
12 0
|
13天前
|
开发工具 对象存储 Android开发
对象存储oss使用问题之C++使用OSS SDK时遍历OSS上的文件时崩溃如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
24 0
|
14天前
|
存储 编译器 C++
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
【C++成长记】C++入门 | 类和对象(上) |类的作用域、类的实例化、类的对象大小的计算、类成员函数的this指针
|
20天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0