#include<stdio.h> void fun(int *a, int *b) { int *k; k=a; a=b; b=k;} int main() { int a=3, b=6, *x=&a, *y=&b; fun(x,y); printf("%d %d", a, b); }
时间: 2024-04-04 17:05:10 浏览: 318
在这段代码中,函数 `fun` 接受两个整型指针 `a` 和 `b` 作为参数,然后交换它们所指向的整型变量的值。
在 `main` 函数中,定义了两个整型变量 `a` 和 `b`,并且分别用指针 `x` 和 `y` 指向它们。然后调用函数 `fun(x, y)` 来交换 `a` 和 `b` 的值。
最后,通过 `printf` 函数打印出交换后的 `a` 和 `b` 的值。
根据代码的逻辑,我们可以得出函数 `fun` 并没有真正交换 `a` 和 `b` 的值,因为在函数内部只是交换了指针 `a` 和 `b` 的指向。所以,无论如何结果都是打印出原始的 `a` 和 `b` 的值,即输出为 "3 6"。
相关问题
#include<stdio.h> void fun (int *a,int *b); int main() { int a,b; scanf("a=%d,b=%d",&a,&b); fun(&a,&b); printf("a=%d b=%d\n",a,b); return 0; } void fun(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp; }c语言
这段代码实现了通过指针将两个变量的值进行交换的功能。首先在主函数中输入两个整数a和b,然后调用fun函数,将a和b的地址作为参数传递给fun函数。在fun函数中,将a所指向的变量值赋给temp,然后将b所指向的变量值赋给a所指向的变量,最后将temp的值赋给b所指向的变量。因此,通过指针操作,成功实现了a和b的值交换。最后在主函数中输出交换后的结果。
对这段代码进行改错#include <conio.h> #include <stdio.h> #include <stdlib.h> #define N 20 /**********FOUND**********/ void fun( int a, int n ) { int i, j, k, t ; for ( j = 0; j < n-1; j++) { k = j; for ( i = j + 1; i < n ; i++ ) /**********FOUND**********/ if ( a [i] < a[k] ) k = i; t = a[j] ; a[j] = a[k]; a[k] = t; } }
有两处错误需要进行改正:
1. 第一个错误是参数a应该是一个指针类型,而不是一个整型变量。因为如果传递的是一个整型变量,函数内部无法通过指针访问数组元素。因此需要将参数a修改为int a[]或者int *a。
2. 第二个错误是函数定义时缺少了返回值类型,应该将void fun修改为void。
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 20
void fun(int a[], int n) {
int i, j, k, t;
for (j = 0; j < n-1; j++) {
k = j;
for (i = j + 1; i < n; i++) {
if (a[i] < a[k]) {
k = i;
}
}
t = a[j];
a[j] = a[k];
a[k] = t;
}
}
int main() {
int a[N], i;
for (i = 0; i < N; i++) {
a[i] = rand() % 100;
printf("%d ", a[i]);
}
printf("\n");
fun(a, N);
for (i = 0; i < N; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
阅读全文