函数的调用和参数的传递
来源:互联网 发布:游戏优化软件哪个好 编辑:程序博客网 时间:2024/05/13 14:31
今天学习了函数的调用和参数的传递,让我对这个知识点有了更深入的理解。所谓的函数调用,就是在主函数中调用其他部分的函数。为什么要用到函数的调用呢?我认为有以下几个原因:
一:在大型的软件和项目编写的时候,经常会把整体分成几个大的部分 ,通过函数的调用,我们可以把这几大部分连接起来,使得程序的思路清晰,而且容易让人理解,在修改和维护程序的时候可以达到方便的效果。
二:在一些软件的编写里,一个功能可能会用到很多次,我们为了方便,可以把这个功能写成一个函数,在需要这个功能的时候,直接调用函数即可。
第二种为:
当运行后,就会发现*p 变化了 ,但是 p永远不会发生改变。在引用形参中 用它来改变实参的值比用指针形参来得快。下面用两个程序进行对比,则一目了然。用指针形参:
用引用形参
比较上述两个例子,显然让人感觉用引用参数来改变实参的值更加自然更加方便。
一:在大型的软件和项目编写的时候,经常会把整体分成几个大的部分 ,通过函数的调用,我们可以把这几大部分连接起来,使得程序的思路清晰,而且容易让人理解,在修改和维护程序的时候可以达到方便的效果。
二:在一些软件的编写里,一个功能可能会用到很多次,我们为了方便,可以把这个功能写成一个函数,在需要这个功能的时候,直接调用函数即可。
记得以前我刚进嵌入式基地的时候曾写过一个五子棋的程序,那时候刚刚开始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
- 函数的调用和参数的传递
- .和:调用函数参数的传递
- Matlab的函数调用和参数传递
- 函数调用的参数传递
- Intel和ARM GCC程序函数调用的参数传递
- 【JavaScript】函数的参数传递和递归调用
- JAVA中函数调用参数传递的理解(值传递和引用传递的理解)
- VDSP函数调用时的参数传递
- 函数的调用及参数传递
- C++函数调用时的参数传递
- python的函数调用参数传递
- JavaScript-函数的调用,无参函数和有参函数,参数的的传递
- 调用参数的传递
- h5 哥德巴赫猜想验证、函数和数组、函数的调用、形参与实参、参数的传递
- 关于C语言中函数调用和参数传递机制的探讨(一 .无参数传递)
- 关于C语言中函数调用和参数传递机制的探讨(二 .传递一个参数)
- 关于C语言中函数调用和参数传递机制的探讨(三 .传递多个参数等)
- QML的createQmlObject()函数参数传递和函数传递
- PKU3261(Milk Patterns)求可重叠k次的最长重复子串(后缀数组+二分)
- 设置view 的MarginTop
- C++ primer
- 第四周项目五选作2
- VC发E-MAIL的方法,可带附件
- 函数的调用和参数的传递
- 开个博客,开始写些东西吧
- 开源中国社区-IOS
- Unable to instantiate Action,,,,,,,,,defined for ',,,' in namespace '/,,,'null
- 重定向dup2的本质
- Asp.Net MVC 在后台获取PartialView、View文件生成的字符串
- VGA接口之显示彩色条
- cf228d
- dup,dup2