#include <stdio.h> int main(void) { int a[10], b[10], *pa, *pb, i; pa = a; pb = b; for( i = 0; i < 3; i++, pa++, pb++){ *pa = i; *pb = 2*i; } pa = &a[0]; pb = &b[0]; for ( i = 0; i < 3; i++, pa++, pb++){ *pa = *pa + i; *pb = *pb + i; } printf("%d %d", *--pa, *--pb); /* 输出的数字之间有一个空格 */ return 0; }详细解释其输出结果
时间: 2024-03-04 10:53:11 浏览: 215
这段代码的输出结果是 "5 7",其中第一个数字是数组 a 的最后一个元素经过加操作后的值,第二个数字是数组 b 的最后一个元素经过加操作后的值。
代码中首先定义了两个数组 a 和 b,以及两个指针 pa 和 pb,初始时将指针 pa 和 pb 分别指向数组 a 和 b 的第一个元素。
接着进入一个循环,循环次数为 3,每次循环将指针 pa 和 pb 分别移动一位,并分别给数组 a 和 b 赋值。其中 a[i] 被赋值为 i,b[i] 被赋值为 2*i。
然后重新将指针 pa 和 pb 分别指向数组 a 和 b 的第一个元素,再进入另一个循环,循环次数同样为 3,每次循环将指针 pa 和 pb 分别移动一位,并分别对数组 a 和 b 的元素进行加操作。其中 *pa + i 将数组 a 的每个元素加上它的下标 i,*pb + i 将数组 b 的每个元素加上它的下标 i。
最后通过 --pa 和 --pb 将指针 pa 和 pb 分别指向数组 a 和 b 的最后一个元素,再输出它们的值,即为 "5 7"。
相关问题
#include<stdio.h> #include<stdlib.h> void swap2(int *p1,int *p2) { int *t; t=p1; p1=p2; p2=t; } void main() { int a=3; int b=5; int *pa=&a,*pb=&b; printf("俩个数据值为%d %d\n",a,b); if(a<b) swap2(pa,pb); printf("互换后的结果为%d %d\n",a,b); system("pause"); }为什么互换不成功
这个程序中的 `swap2` 函数并没有真正交换指针所指向的变量的值,而是只交换了指针本身的值。因此,当 `swap2` 函数返回后,`pa` 和 `pb` 指向的变量并没有发生交换,因此互换不成功。
要让函数真正交换指针所指向的变量的值,应该改为这样:
```
void swap2(int *p1,int *p2) {
int t = *p1;
*p1 = *p2;
*p2 = t;
}
```
这样就可以成功交换 `pa` 和 `pb` 指向的变量的值了。
以下程序中函数代码的功能是将三个实在参数从小到大排序。请补充代码。\n#include<stdio.h>\nvoid sort(int *pa,int *pb,int *pc){ //排序
该程序中的函数是将三个参数从小到大排列。以下是补充代码:
#include <stdio.h>
void sort(int *pa, int *pb, int *pc) {
int tmp;
if (*pa > *pb) {
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
if (*pb > *pc) {
tmp = *pb;
*pb = *pc;
*pc = tmp;
}
if (*pa > *pb) {
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
}
int main() {
int a, b, c;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
sort(&a, &b, &c);
printf("排序后的结果为:%d %d %d\n", a, b, c);
return 0;
}
注:该程序中使用指针参数,可以直接修改原来参数的值,没有返回值。
阅读全文