【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


相关文章
|
7月前
|
缓存 安全 编译器
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
《C++面试冲刺周刊》第三期聚焦指针与引用的区别,从青铜到王者级别面试回答解析,助你21天系统备战,直击高频考点,提升实战能力,轻松应对大厂C++面试。
706 132
C++面试周刊(3):面试不慌,这样回答指针与引用,青铜秒变王者
|
7月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
628 12
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
326 4
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
11月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
438 12