#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 21:02:57 浏览: 44
这段代码中的 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> #include<stdlib.h> void input(int *&a,int & n); void output(int *a,int n); void comp(int *a, int n) ; void swap(int &a, int &b); int main () { int i,n; int *a = NULL; input (a,n); comp(a, n) ; output(a,n); free(a); return 0; } /**********定义函数**********/ /********** Begin **********/ /********** End **********/
这段代码是一个简单的排序程序,使用了选择排序算法。以下是对各个函数的解释:
1. `void input(int *&a,int & n)`:这个函数是输入函数,用于输入数组a和数组长度n。
2. `void output(int *a,int n)`:这个函数是输出函数,用于输出排好序的数组a。
3. `void comp(int *a, int n)`:这个函数是排序函数,用于对数组a进行排序。
4. `void swap(int &a, int &b)`:这个函数用于交换两个变量a和b的值。
在主函数中,先通过input函数输入数组a和数组长度n,然后调用comp函数对数组a进行排序,最后输出排好序的数组a。最后使用free函数释放动态分配的内存。
#include<stdio.h> void swap1(int *p1, int *p2) { int t; t = *p1; *p1 = *p2; *p2 = *p1; } void main() { int a = 3; int b = 5; int* pa = &a, * pb = &b; if (a < b) swap1(pa,pb); }
这段代码中的swap1函数实现的是交换两个整数的值,但是代码中存在问题。在交换两个整数的值时,需要将第一个整数的值存储到一个临时变量中,然后再将第二个整数的值赋给第一个整数,最后再将临时变量的值赋给第二个整数。但是代码中的第三行 "*p2 = *p1;" 实际上是将第一个整数的值赋给了第二个整数,这样会导致两个整数的值相同,而不是实现交换。正确的代码应该是:
```
void swap1(int *p1, int *p2) {
int t;
t = *p1;
*p1 = *p2;
*p2 = t;
}
```
此外,main函数中没有输出结果的语句,你可以添加一个printf语句来输出交换后的结果。
阅读全文