本题收录于 牛客网 在线编程-语法篇-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