数据结构上机实践第二周项目1
【项目1 - C/C++语言中函数参数传递的三种方式】
根据以下三种myswap函数对横线处填充内容进行修改
在myswap函数中 整型变量x和y为形式参数,其值由主函数中调用次函数的实参传递,调用函数时,为x开辟内存空间,为y开辟内存空间,但是实参a,b与形参x,y都为独立的内存空间,调用myswap函数后,调换的是x与y的值,x与y的内存空间在myswap函数结束时释放空间,并不能使a,b的值调换,所以这种方式不能在此题的条件下不能完成主函数中a与b的调换,输出结果仍未原结果。
这种方式下,myswap函数的形参使两个整型指针变量,在此函数结束后虽然指针变量会释放,但是可以改变指针变量所指向的变量,所以,主函数可修改为
通过主函数传递a的地址和b的地址给myswap函数的p1,p2,通过改变指针所指向的变量(a,b)来调换a,b的值。
在这个myswap函数中,形式参数改为了int &x,int &y,即为与主函数传递的实参共用一块内存空间,还可以说x,y是变量a,b的别名,所以主函数中只需要将变量a,b传递给myswap函数即可。
运行结果:
C语言提供了两种函数参数传递的方式:传值和传地址。在C++中,又拓展了引用方式。通过本项目,确认自己已经掌握了这三种方式的原理,为后续学习做好准备。
主函数代码如下:
- int main()
- {
- int a, b;
- printf("请输入待交换的两个整数:");
- scanf("%d %d", &a, &b);
- __________________; //分三个程序,分别写上调用myswap的合适形式
- printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
- return 0;
- }
方式 1:
- //(1)传值
- void myswap(int x, int y)
- {
- int t;
- t=x;
- x=y;
- y=t;
- }
方式 2:
- //(2)传地址
- void myswap(int *p1, int *p2)
- {
- int t;
- t=*p1;
- *p1=*p2;
- *p2=t;
- }
- int main()
- {
- int a, b;
- printf("请输入待交换的两个整数:");
- scanf("%d %d", &a, &b);
- myswap(&a,&b); //分三个程序,分别写上调用myswap的合适形式
- printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
- return 0;
- }
运行结果:
方式 3:
- //(3)引用作形参
- void myswap(int &x, int &y)
- {
- int t;
- t=x;
- x=y;
- y=t;
- }
修改主函数为:
- int main()
- {
- int a, b;
- printf("请输入待交换的两个整数:");
- scanf("%d %d", &a, &b);
- myswap(a,b); //分三个程序,分别写上调用myswap的合适形式
- printf("调用交换函数后的结果是:%d 和 %d\n", a, b);
- return 0;
- }
相关推荐
- 数据结构第二周项目--程序的多文件组织
- 数据结构第二周项目-程序的多文件组织
- 数据结构第二周 项目2程序的多组织文件
- 20172303 2018-2019-1 《程序设计与数据结构》第5周课堂实践报告
- 20172303 2017-2018-2 《程序设计与数据结构》结对编程项目-四则运算 第二周
- 20172303 2017-2018-2 《程序设计与数据结构》结对编程项目-四则运算 第二周
- 数据结构上机实践第二周项目2- 程序的多文件组织
- 数据结构上机实践第七周项目3 - 负数把正数赶出队列
- 数据结构上机实践第二周项目1
- 数据结构上机实践第十周项目1 - 二叉树算法验证
- Cadence导入altium生成的网表时出现的一些错误及解决方法
- 大数据技术的应用项目类型