#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=3,y=4
时间: 2023-12-03 08:02:45 浏览: 34
这是因为在函数`fun`中,交换的是指针`a`和`b`的值,而不是交换指针所指向的变量的值。
在`main`函数中,我们传递了变量`x`和`y`的地址给函数`fun`,但是在`fun`函数中交换的是指针`a`和`b`的值,而不是交换`x`和`y`的值,因此`x`和`y`的值没有发生改变,仍然是3和4。
如果想要交换`x`和`y`的值,可以将`fun`函数改为如下形式:
```c
void fun(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
```
这样就会交换`x`和`y`的值,输出结果为`4,3`。
相关问题
#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"。
} 2、程序填空 #include<stdio.h> voidfun(inta[],intn) {inti,t;
#include <stdio.h>
void fun(int a[], int n) {
int i, t;
for (i = 0; i < n / 2; i++) {
t = a[i];
a[i] = a[n - 1 - i];
a[n - 1 - i] = t;
}
}
// 示例测试
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int i;
fun(arr, 5);
for (i = 0; i < 5; i++)
printf("%d ", arr[i]);
return 0;
}