函数的调用和参数的传递

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

记得以前我刚进嵌入式基地的时候曾写过一个五子棋的程序,那时候刚刚开始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


原创粉丝点击