void swap1(int x,int y); { int t;t=x;x=y;y=t; } /*swap2的形参为指针变量px,py,函数的功能为交换指针所指向的变量*/ void swap3(int *px,int *py) { int t;t=*px;*px=*py;*py=t; } /*swap3的形参为指针变量px,py,函数的功能为交换指针所指向的变量*/ void swap3(int *px,int *py) {int *pt;pt=px;px=py;py=pt; } int main() { int a=1,b=2; int *pa=&a,*pb=&b; swap(a,b);//使用变量a,b调用函数swap1() printf("After calling swap1:a=%d b=%d\n",a,b); a=1;b=2; swap2(pa,pb);//用指针pa,pb调用函数swap2() printf("After calling swap2:a=%d b=%d\n",a,b); a=1;b=2; swap3(pa,pb);//使用指针pa,pb调用swap3() printf("After calling swap3:a=%d b=%d\n",a,b); return 0; }哪里错了
时间: 2024-02-13 10:04:54 浏览: 23
在代码中存在一个错误,即函数swap1的定义有误,多了一个分号,应该改为:
```c++
void swap1(int x, int y) {
int t;
t = x;
x = y;
y = t;
}
```
此外,函数swap3的实现不正确,因为交换指针本身的值并不会改变指针所指向的变量。应该改为:
```c++
void swap3(int* px, int* py) {
int t;
t = *px;
*px = *py;
*py = t;
}
```
这样,调用swap3后,指针所指向的变量的值才会被交换。
相关问题
void swap(int &x,int &y){ int t = x; x = y; y = t; }为什么函数定义要加&
这是因为“&”符号表示取地址符,它可以用于定义引用类型。
在函数定义中,参数前面加上“&”符号表示这是一个引用类型的参数,也就是说,这个参数实际上是传入的变量的地址。在函数内部修改这个参数的值时,实际上是修改了这个变量的值。
在这个具体的函数中,加上“&”符号的作用是让参数 x 和 y 成为引用类型的参数,这样函数内部对参数的修改会直接影响到传入的变量。
如果不加“&”符号,这两个参数就会成为传值类型的参数,函数内部对它们的修改不会影响到传入的变量。
void swap(int &x, int &y) { int t = x; // 将 x 的值存储到临时变量 t 中 x = y; // 将 y 的值赋给 x y = t; // 将 t 的值赋给 y,即将 x 的值赋给 y}用到指针了吗
在这个 swap 函数的实现中,并没有用到指针。它是通过引用的方式来实现变量值的交换,引用是一种更加安全和简便的方式,可以避免指针所带来的一些问题,如空指针的访问等。如果使用指针来实现变量值的交换,可以写成下面这样:
```
void swap(int *x, int *y) {
int t = *x; // 将 x 指向的变量的值存储到临时变量 t 中
*x = *y; // 将 y 指向的变量的值赋给 x 指向的变量
*y = t; // 将 t 的值赋给 y 指向的变量,即将 x 指向的变量的值赋给 y 指向的变量
}
```
在调用 swap 函数时,需要将变量的地址作为参数传递给 swap 函数,从而实现变量值的交换。具体代码如下:
```
int a = 1, b = 2;
swap(&a, &b);
```
这样,变量 a 和 b 的值就会被交换。但是需要注意的是,在使用指针时需要特别小心,避免出现空指针访问等错误。