/* 交换两个数 请编写函数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; }分析以上代码
时间: 2023-10-21 14:59:00 浏览: 87
以上代码实现了交换两个整数变量的值,并且提供了两种不同的实现方式:指针传递参数和引用传递参数。下面对代码进行分析:
在代码中,主函数中定义了两个整型变量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的值。
综上所述,该程序实现了交换两个整数变量的值,并且提供了两种不同的实现方式。但是需要注意输出的变量名应该和实际调用的变量名相对应。
相关问题
C语言:本关任务:采用指针变量作为形参,编写一个实现两个整数交换的函数。在主函数中输入三个整数,调用数据交换函数将他们按从大到小的顺序排序后输出。已给出:#include <stdio.h> void main() { int a,b,c; void swap(int *px,int *py); scanf("%d%d%d",&a,&b,&c); if(a<b) swap(&a,&b); if(a<c) swap(&a,&c); if(b<c) swap(&b,&c); printf("%d %d %d\n",a,b,c); } void swap(int *px,int *py) //定义实现数据交换的函数 { //************Begin*********** //************End*********** }
下面是实现两个整数交换的函数的代码:
```c
#include <stdio.h>
void swap(int *px, int *py); // 函数声明
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (a < b)
swap(&a, &b);
if (a < c)
swap(&a, &c);
if (b < c)
swap(&b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
void swap(int *px, int *py)
{
int temp;
temp = *px;
*px = *py;
*py = temp;
}
```
在这个程序中,我们定义了一个 swap 函数,该函数接受两个指向整数的指针作为参数。在函数内部,我们首先用一个临时变量 temp 存储指针 px 指向的整数的值,然后将指针 px 指向的整数的值改为指针 py 指向的整数的值,最后将指针 py 指向的整数的值改为 temp。这样就完成了两个整数的交换。
在主函数中,我们使用 scanf 函数从用户输入中读取三个整数,并将它们存储在变量 a、b 和 c 中。然后我们使用 if 语句将这三个整数按从大到小的顺序排序。在排序过程中,我们调用 swap 函数来交换两个整数的值。最后,我们使用 printf 函数按照指定的格式输出排序后的三个整数。
void swap(int *px,int *py)和void swap(int &px,int &py)在都可以被调用时不会冲突吗
在C++中,函数的重载机制可以使得同名函数以不同的形式被声明和定义,从而在调用时根据传递的参数类型自动选择正确的函数进行调用。因此,void swap(int *px,int *py)和void swap(int &px,int &py)作为两个不同的函数可以同时存在,并且不会冲突。
在调用swap函数时,编译器会根据传递的参数类型来自动选择正确的函数进行调用,例如:
```
int a = 10, b = 20;
int *p1 = &a, *p2 = &b;
swap(p1, p2); // 调用void swap(int *px,int *py)函数
swap(a, b); // 调用void swap(int &px,int &py)函数
```
因此,这两个函数可以同时存在,且在传递不同类型的参数时,编译器会自动选择正确的函数进行调用,不会发生冲突。
阅读全文