理解指针数组 输出样例1,2,3 4,5,6 7,8,9
时间: 2023-09-29 21:02:59 浏览: 42
下面是一个示例程序,用指针数组实现输出样例1、2、3、4、5、6、7、8、9:
```c
#include <stdio.h>
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int *p[3] = {arr[0], arr[1], arr[2]}; // 定义指针数组,每个元素指向二维数组的一行
// 输出样例1、2、3
for (int i = 0; i < 3; i++) {
printf("%d,%d,%d ", *(p[i]), *(p[i] + 1), *(p[i] + 2));
}
printf("\n");
// 输出样例4、5、6
for (int i = 0; i < 3; i++) {
printf("%d,%d,%d ", *(p[0] + i), *(p[1] + i), *(p[2] + i));
}
printf("\n");
// 输出样例7、8、9
for (int i = 0; i < 3; i++) {
printf("%d ", *(p[0] + i * 3 + i));
}
printf("\n");
return 0;
}
```
输出结果为:
```
1,2,3 4,5,6 7,8,9
1,4,7 2,5,8 3,6,9
1,5,9
```
相关问题
理解指针数组输出样例1,2,3 4,5,6 7,8,9
假设有一个指针数组 `arr`,其中存放的是三个指向整型数组的指针,每个整型数组有三个元素。可以通过以下方式输出样例1、2、3、4、5、6、7、8、9:
```c
#include <stdio.h>
int main() {
int a[3] = {1, 2, 3};
int b[3] = {4, 5, 6};
int c[3] = {7, 8, 9};
int *arr[3] = {a, b, c}; // 定义指针数组,存放指向整型数组的指针
// 输出样例1、2、3
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", *(arr[i] + j));
}
printf("\n");
}
// 输出样例4、5、6
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", *(*(arr + i) + j));
}
printf("\n");
}
// 输出样例7、8、9
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果:
```
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
```
指针与数组 分数 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
这段代码中定义了一个整型数组 `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;
}
```