函数的调用和参数的传递

     今天学习了函数的调用和参数的传递,让我对这个知识点有了更深入的理解。所谓的函数调用,就是在主函数中调用其他部分的函数。为什么要用到函数的调用呢?我认为有以下几个原因:
   一:在大型的软件和项目编写的时候,经常会把整体分成几个大的部分 ,通过函数的调用,我们可以把这几大部分连接起来,使得程序的思路清晰,而且容易让人理解,在修改和维护程序的时候可以达到方便的效果。
  二:在一些软件的编写里,一个功能可能会用到很多次,我们为了方便,可以把这个功能写成一个函数,在需要这个功能的时候,直接调用函数即可。

记得以前我刚进嵌入式基地的时候曾写过一个五子棋的程序,那时候刚刚开始c++的学习,在懂得数组,变量类型等基础知识的情况下,我写出了400多行的代码(当然我使用easyX这个库来解决图形的)。但是我的代码很长,如果让其他人来看我的程序,必定会很头疼。如果当时我用上了函数的调用,我想我的编程思路必定会清清楚楚。在修改的时候也很方便。 在函数的调用中有两种方式。一是把函数定义在主函数前面;另一种则是把函数定义在主函数后面,如果把函数定义在最后,应当在主函数前面对自己的函数进行声明。

第一种为:

int swap(int,int)
{
   return 0;
}                   //函数的定义
int main()
{
  swap(int,int);  //函数的调用
  return 0;
}

第二种为:

int swap(int,int) //函数的声明
int main()
{
  swap(int,int);  //函数的调用
  return 0;
}
int swap(int,int) //函数的定义
{
 return 0;
}
在函数的调用中,就涉及到了参数的传递:参数分两种:形参和实参。而形参又分两种:非引用形参和引用形参。非引用形参有变量,指针和const;当实参对形参初始化时,将会产生一个实参副本;也就是说并不改变实际参数的值,但如果参数是指针时,由于指针的实质是一个地址,那么在调用的函数中,如果对形参的地址和所指向的对象进行改变时,在主函数中,实参的地址并没改变,但是它所指向的对象改变了。

for example:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int swap(int *p1);
int main()
{
	int i=10;
	int *p = &i;
	cout<<"i;"<<*p<<"\t"<<"p:"<<p<<endl;
	swap(p);
	cout<<"i;"<<*p<<"\t"<<"p:"<<p<<endl;
	return 0;
}
int swap(int *p1)
{
	*p1 = 0;
	p1 =0;
	return 0;
}

当运行后,就会发现*p 变化了 ,但是 p永远不会发生改变。在引用形参中 用它来改变实参的值比用指针形参来得快。下面用两个程序进行对比,则一目了然。用指针形参:

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int result(int *i,int *p);
int main()
{
	int i=10,j=20;
	int *p1=&i,*p2=&j;
	result(p1,p2);
	cout<<*p1<<"  "<<*p2<<endl;
	cin>>i;
	return 0;
}
int result(int *i,int *p)
{
	int temp;
	temp =*i;
	*i =*p;
	*p= temp;
	return 0;
}

用引用形参

#include<iostream>
using std::cin;
using std::cout;
using std::endl;
int result(int &i,int &p);
int main()
{
	int i=10,j =20;
	cout<<i<<"  "<<j<<endl;
	result(i,j);
	cout<<i<<"  "<<j<<endl;
	cin>>i;
	return 0;
}
int result(int &i,int &p)
{
	int temp;
	temp = i;
	 i  = p;
	p = temp;
	return 0;
}

比较上述两个例子,显然让人感觉用引用参数来改变实参的值更加自然更加方便。

PS:菜鸟初写博客,只为互相交流技术,如果文章中有错误或者您有更好的见解,望指出,骚年我十分感谢。thanks


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值