指针与数组 分数 100 全屏浏览题目 作者 于延 单位 哈尔滨师范大学 请分析以下代码,理解指针与数组的关系、指针运算。 #include<stdio.h> int main(){ int a[10]={0,1,2,3,4,5,6,7,8,9}; int i,*p1,*p2,*p3; p1=a,p2=a+5,p3=a+7; //相当于 p1=&a[0],p2=&a[5],p3=&a[7]; printf("%ld,%ld,%ld\n",p1,p2,p3); //输出指针的值(数组元素地址值) printf("%d,%d,%d\n",*p1,*p2,*p3); //输出指针指向变量的值 printf("%d,%d\n",p1-p2,p2-p1); //指针减法 printf("%d,%d\n",p1>p2,p1==a); //指针与指针的关系 for(p1=a;p1<a+10;p1++) //通过指针遍历数组 printf("%d ",*p1); return 0; } 编程读入若干整数(不超过50个)到数组中,然后倒序输出,遍历数组时用指针实现。 输入样例: 1 5 25 18 -299 输出样例: -299 18 25 5 1
时间: 2024-01-19 11:03:24 浏览: 145
这段代码中定义了一个整型数组 `a`,并初始化为 `0,1,2,3,4,5,6,7,8,9`。之后定义了四个整型指针 `p1`, `p2`, `p3`, `i`。其中 `p1` 被初始化为 `a` 的地址,即 `&a[0]`,`p2` 被初始化为 `a+5`,即 `&a[5]` 的地址,`p3` 被初始化为 `a+7`,即 `&a[7]` 的地址。通过 `printf` 输出这三个指针所指向的数组元素的值,分别为 `0,5,7`。
之后通过 `p1-p2` 和 `p2-p1` 输出指针之间的差,即 `p1` 指向的数组元素与 `p2` 指向的数组元素之间隔了多少个元素,分别为 `-5` 和 `5`。通过 `p1>p2` 和 `p1==a` 输出指针之间的关系,前者表示 `p1` 所指向的数组元素是否在 `p2` 所指向的数组元素之后,后者表示 `p1` 是否指向了数组 `a` 的第一个元素,分别为 `0` 和 `1`。
最后通过 `for` 循环通过指针 `p1` 遍历数组并输出数组元素的值,即实现了倒序输出数组。具体实现如下:
```c++
#include <stdio.h>
int main() {
int a[50];
int n = 0;
while (scanf("%d", &a[n]) != EOF) {
n++;
}
int *p = a + n - 1;
for (; p >= a; p--) {
printf("%d ", *p);
}
return 0;
}
```
阅读全文