【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
相关文章
|
10天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
7天前
|
算法 索引
单链表题+数组题(快慢指针和左右指针)
单链表题+数组题(快慢指针和左右指针)
15 1
|
16天前
|
存储
如何使用指针数组来实现动态二维数组
指针数组可以用来实现动态二维数组。首先,定义一个指向指针的指针变量,并使用 `malloc` 为它分配内存,然后为每个子数组分配内存。通过这种方式,可以灵活地创建和管理不同大小的二维数组。
|
16天前
|
存储
如何通过指针数组来实现二维数组?
介绍了二维数组和指针数组的概念及其区别,详细讲解了如何使用指针数组模拟二维数组,包括定义与分配内存、访问和赋值元素、以及正确释放内存的步骤,适用于需要动态处理二维数据的场景。
|
16天前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
22天前
魔法指针 之 二级指针 指针数组
魔法指针 之 二级指针 指针数组
15 1
|
28天前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
27 1
|
25天前
|
存储
一篇文章了解区分指针数组,数组指针,函数指针,链表。
一篇文章了解区分指针数组,数组指针,函数指针,链表。
17 0
|
25天前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
19 0
|
2月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。