void swap2( int *px, int *py); int main (void) { int a = 1, b = 2; int *pa = &a, *pb = &b; swap2 (a, b); printf ("a=%d b=%d\n", a, b); //a=2 b=1 return 0; } void swap2 (int *px, int *py) { int t; t = *px; *px = *py; *py = t; } 找出上述程序错误的地方并改正.
时间: 2023-03-29 17:02:45 浏览: 182
我可以回答这个问题。这是一个函数和主函数的代码片段,函数名为 swap2,参数为两个指向整型变量的指针。函数的作用是交换指针所指向的两个变量的值。在主函数中,定义了两个整型变量 a 和 b,并分别赋值为 1 和 2。然后定义了一个指向整型变量的指针 pa,将其指向变量 a。
相关问题
/* 交换两个数 请编写函数void swap(int *px,int *py) 与void swap(int &px,int &py),实现主程序中变量a和b值的交换。 输出结果如下: 3 2 2 3 注意: (1)部分源程序已存在文件sy02_2.cpp中。 (2)请勿修改主函数main和其他函数中的任何内容,仅在函数相应的花括号中填写若干语句。 */ #include<iostream> using namespace std; void swap(int *px,int *py)//a b { //******************************* int *p=px; px=py; py=p; //============================= } //void swap(int &px,int &py) //{ ////******************************* //int t=px; //px=py; //py=t; // // ////============================= //} int main() { int a=2,b=3; swap(a,b); cout<<a<<" "<<b<<endl; int c=3,d=2; swap(&c,&d); cout<<a<<" "<<b<<endl; }分析以上代码
以上代码实现了交换两个整数变量的值,并且提供了两种不同的实现方式:指针传递参数和引用传递参数。下面对代码进行分析:
在代码中,主函数中定义了两个整型变量a和b,并且分别赋值为2和3。然后调用swap函数,传递a和b作为参数,实现a和b的值交换。根据函数重载机制,编译器会自动选择正确的函数进行调用,因此在本例中,调用的是void swap(int &px,int &py)函数。函数内部使用了引用传递参数的方式,直接对变量进行操作来进行交换。
交换完成后,输出a和b的值,此时a的值为3,b的值为2。
接着,主函数中定义了另外两个整型变量c和d,并且分别赋值为3和2。然后调用swap函数,传递c和d的地址作为参数,实现c和d的值交换。根据函数重载机制,编译器会自动选择正确的函数进行调用,因此在本例中,调用的是void swap(int *px,int *py)函数。函数内部使用了指针传递参数的方式,通过指针间接访问变量的值来进行交换。
交换完成后,输出a和b的值,此时a的值为3,b的值为2。需要注意的是,在输出c和d的值时,输出的应该是c和d的值,而不是a和b的值。
综上所述,该程序实现了交换两个整数变量的值,并且提供了两种不同的实现方式。但是需要注意输出的变量名应该和实际调用的变量名相对应。
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; }哪里错了
在代码中存在一个错误,即函数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后,指针所指向的变量的值才会被交换。
阅读全文