本题收录于 牛客网 在线编程-语法篇-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
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;
}
一维数组声明语句格式:
类型名 数组名[数组元素个数]
数组元素的表现形式是 数组名+方括号"[ ]" ,括号里面为该元素在数组里的位置,称为 数组元素的下标 。
数组在声明的同时可以进行初始化,初始化的值用 大括号“{ }” 括起来。
本题中的数组声明和初始化:
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
不用指针遍历,直接用数组下标访问
#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;
}
使用指针遍历访问
#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;
}
两种访问元素的方式的输出结果都一样。
输出:
10 20 30 40 50 60