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;}
}


目录
相关文章
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
75 1
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
498 3
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
79 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
37 0
C++ 多线程之线程管理函数
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
38 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
343 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
47 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
24 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
60 0
C++入门6——模板(泛型编程、函数模板、类模板)