void fun(int *a, int *b) { int c = 0; c = *a; *a = *b; *b = c; } int main() { int a = 1; int b = 2; cout << a << "," << b << endl; fun(&a, &b);//a,b交换 cout << a << "," << b << endl; system("pause"); return 0;输出的是什么
时间: 2023-08-08 10:06:09 浏览: 195
这段代码会输出:
```
1,2
2,1
```
首先,在 `main` 函数中定义了两个整型变量 `a` 和 `b` 并分别赋值为 1 和 2。
然后,调用了函数 `fun`,将 `a` 和 `b` 的地址作为参数传递给函数。
在函数 `fun` 中,定义了一个整型变量 `c` 并将其初始化为 0。接着,将 `a` 指向的值赋给了 `c`,将 `b` 指向的值赋给了 `a`,最后将 `c` 的值赋给了 `b`,从而实现了交换 `a` 和 `b` 的值。
回到 `main` 函数,输出了交换后的 `a` 和 `b` 的值,即 2 和 1。
相关问题
程序哪里有错误 fun(int *p1,int *p2) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; }
这个函数`fun(int *p1, int *p2)`存在几个错误和潜在问题:
1. 变量声明与赋值:你试图通过`*p = *p1`来分配指针`p`的值,但实际上`p`是一个未初始化的指针,直接赋值可能会导致不确定的行为。正确的做法是先为`p`指向一个内存位置。
2. 临时变量:你的代码没有明确使用`p`这个临时变量。如果你想交换`p1`和`p2`所指向的值,应该使用指针的解引用操作,而不是将`*p`赋值给它们。
3. 指向不确定的数据:由于`p`没有被初始化,如果它指向的是栈上的临时空间,当函数结束时这些值可能会丢失,除非特别指定它指向堆中的数据。
修复后的代码可能如下所示:
```c
void swap(int **p1, int **p2) {
int temp;
*temp = *(*p1); // 保存p1指向的值
*(*p1) = *(*p2); // 将p2指向的值赋给p1
*(*p2) = temp; // 将保存的值赋给p2
}
```
#include<stdio.h> void fun(int *a, int *b) { int *t; t=a;a=b;b=t; } void main( ) { int x=3, y=4; fun(&x, &y); printf("%d, %d", x, y);
这段代码的作用是交换变量x和y的值。但是代码有一个小错误,main函数的返回值类型应该是int而不是void。
正确的代码应该是这样的:
```
#include <stdio.h>
void fun(int *a, int *b) {
int *t;
t = a;
a = b;
b = t;
}
int main() {
int x = 3, y = 4;
fun(&x, &y);
printf("%d, %d", x, y);
return 0;
}
```
运行结果会输出 "3, 4",因为指针变量a和b在fun函数内部交换了指向的地址,但是并没有改变x和y的值。如果想要交换x和y的值,可以修改fun函数的实现,如下所示:
```
void fun(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
```
这样运行结果就会输出 "4, 3"。
阅读全文