C++第17周项目1——体会函数参数传递

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565【项目1-体会函数参数传递】1、下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述(自己的话,但要用术语,用术语讲技术的事,是必

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


【项目1-体会函数参数传递】
1、下面三段程序都试图通过定义函数,实现实际参数在必要时的交换,哪些能够实现,哪些不能实现?通过运行程序和单步执行,让自己对这一过程更加清楚,然后请在博文中给出明确的回答,并用你自己的话展开描述(自己的话,但要用术语,用术语讲技术的事,是必须经历的一个过程。)

2、设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求
(1)排序功能通过函数实现
(2)写出两个版本的函数实现,一个采用传地址值的方法,另一个采用引用类型作参数
  注意:不要一看排序就冒泡法、选择法,那是给大规模数据的排序而定的,此处不定义数组,只简单实现即可;不要只盯着完成任务,而更应该知道其中的机理,当编程(本项目第2个要求)难以完成时,通过读程序(本项目第1个要求)并领悟找到启发。

参考解答:

  在函数调用时,实参的值要传递给形参。当形参是指针时,实参也是指针。形参与实参占用不同的内存空间,但通过传值(传地址值),指向的是同一内存单元。当形参指向的单元的值发生变化,也就是实参指向的空间的变化。
  利用指针变量作形参,实现了用调用函数的方法,改变实参的值的目的。

#include <iostream>
using namespace std;
int main( )
{
	void sort(int *,int *,int *); 
	int a=2,b=4,c=3; 
	sort(&a,&b,&c); 
	cout<<"sorted order is "<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}

void sort(int *i,int *j,int *k)      
{ 
	int t;	       
	if (*i>*j) {t=*i;*i=*j;*j=t;}
	if (*i>*k) {t=*i;*i=*k;*k=t;}
	if (*j>*k) {t=*j;*j=*k;*k=t;}
}

  用引用类型作为形参,由于形参与实参实质上就是同一个变量,占用的是同一段内存空间,对形参的改变,实质就是对实参的改变。因此,排序函数中完成的形参的变化,使得在函数调用完后,实参也发生了变化。
  用引用类型作为形参,效果上可以达到传地址值相同的效果,但程序的可读性更好了,更易于理解了。

#include <iostream>
using namespace std;
int main( )
{
	void sort(int &,int &,int &); 
	int a=2,b=4,c=3; 
	sort(a,b,c); 
	cout<<"sorted order is "<<a<<" "<<b<<" "<<c<<endl;
	return 0;
}

void sort(int &i,int &j,int &k)      
{ 
	int t;	       
	if (i>j) {t=i;i=j;j=t;}
	if (i>k) {t=i;i=k;k=t;}
	if (j>k) {t=j;j=k;k=t;}
}


目录
相关文章
|
4天前
|
存储 C++ UED
【C++】飞机大战项目记录
通过上面的设计,我们实现来看飞机大战的主要功能
19 4
|
4天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
15 0
【C++】string学习 — 手搓string类项目
|
4天前
|
自然语言处理 编译器 C语言
【C++】C++ 入门 — 命名空间,输入输出,函数新特性
本文章是我对C++学习的开始,很荣幸与大家一同进步。 首先我先介绍一下C++,C++是上个世纪为了解决软件危机所创立 的一项面向对象的编程语言(OOP思想)。
30 1
【C++】C++ 入门 — 命名空间,输入输出,函数新特性
|
5天前
|
存储 算法 对象存储
【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]
【C++入门到精通】function包装器 | bind() 函数 C++11 [ C++入门 ]
14 1
|
5天前
|
存储 算法 数据安全/隐私保护
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
【C++入门到精通】 哈希结构 | 哈希冲突 | 哈希函数 | 闭散列 | 开散列 [ C++入门 ]
7 0
|
6天前
|
存储 自然语言处理 C++
刷题用到的非常有用的函数c++(持续更新)
刷题用到的非常有用的函数c++(持续更新)
14 1
|
7天前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
21 1
|
13天前
|
存储 C++
c/c++宏定义(函数)
c/c++宏定义(函数)
|
14天前
|
编译器 C++
【C++进阶】引用 & 函数提高
【C++进阶】引用 & 函数提高
|
15天前
|
C++
C++入门项目——通讯管理系统
C++入门项目——通讯管理系统