#include<stdio.h> void swap(int *,int); void main( ) { int a=3,b=5; swap(&a,b); printf("a=%d,b=%d",a,b); } void swap(int *x,int &y) { int temp ; temp=*x ; *x=y ; y=temp ; }为什么不能这么写
时间: 2023-12-03 16:02:57 浏览: 99
这段代码中的 swap 函数的第二个参数是一个引用类型 int &y,而在函数定义时参数类型为 int。这样会导致编译错误,因为参数类型与函数调用时传递的参数类型不一致。
应该将 swap 函数的第二个参数改为引用类型 int &y,这样在函数中可以直接修改原变量 y 的值。修改后的函数定义如下:
```
void swap(int *x, int &y) {
int temp;
temp = *x;
*x = y;
y = temp;
}
```
这样,在调用 swap 函数时,可以将 a 的地址和 b 的值作为参数传递给 swap 函数,从而实现变量值的交换。具体代码如下:
```
int a = 3, b = 5;
swap(&a, b);
printf("a=%d, b=%d", a, b);
```
需要注意的是,函数中的第一个参数 x 是一个指针类型,需要使用 *x 来访问指针所指向的变量的值。而函数中的第二个参数 y 是一个引用类型,可以直接访问原变量的值。
相关问题
#include <stdio.h> void swap( int *pl,int *p2) { int p; p=*pl; *p1=*p2; *p2=p; } void main() { int a,b; scanf(" %d%d ",&a, &b);
这段代码存在几个问题:
1. 函数 swap 的参数名应该是 p1 和 p2,而非 pl 和 p2。
2. 函数 swap 中的变量名 p 和参数名 p2 重复。
3. 函数 swap 中交换两个变量的语句有误,应该是 *p1 = *p2; *p2 = p;。
4. 函数 main 中没有调用 swap 函数。
5. scanf 函数中的格式化字符串多了一个空格,应该改为 scanf("%d%d", &a, &b);。
修正后的代码如下:
```c
#include <stdio.h>
void swap(int *p1, int *p2) {
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
swap(&a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
```
输入例如:
```
1 2
```
输出结果为:
```
a = 2, b = 1
```
#include<stdio.h> void swap(int x,int y) { int t; t=x; x=y; y=t; } int main() { int a=3,b=7; swap(3,7); printf("a=%d\n",a); printf("b=%d\n",b); }想要交换ab的结果怎修改
要修改 swap 函数的参数为指针或引用,这样才能实现对变量的交换。改动后的代码如下:
```c
#include<stdio.h>
void swap(int *x, int *y) {
int t = *x;
*x = *y;
*y = t;
}
int main() {
int a = 3, b = 7;
swap(&a, &b);
printf("a=%d\n", a);
printf("b=%d\n", b);
return 0;
}
```
在 main 函数中调用 swap 函数时,传入的是变量 a 和 b 的地址,swap 函数中的参数也改为指针类型,通过指针操作实现对变量的交换。输出结果为:
```
a=7
b=3
```
可以看到,a 和 b 的值已经成功交换了。