c++函数(努力在路上)

来源:互联网 发布:人工智能招聘信息 编辑:程序博客网 时间:2024/06/06 07:42

c++函数总结 基础(1)

 我这个人不太会表述 ,说的不太严谨 ,有可能也说错了,大家见谅,这是我第一篇博客,我会认真的写,但是因为水平有限,有瑕疵见谅,希望我的总结会对学习c++这个神奇的语言的你,带来顿悟,废话不说 走起。(注:以下代码我会亲测有效才会发布,软件:Microsoft Visual Studio2012)

先写一个小程序:
(1)定义:

//包含两个变量的函数,返回值为double类型double  ShowAllInfo(int i,double j){    double  sum=0;//设置一个double类型的和    sum=i+j;//i自动转化为double类型完成求和    return sum;}

(2)写函数原型

double    ShowAllInfo(int i,double j);//函数原型

(3)调用

    double lmf=0;//定义一个相同类型的接住返回的值    lmf=ShowAllInfo(1,2.6);    cout<<lmf;//输出

效果:和显示出来了

.函数的各种使用格式与用途

描述:函数就是整个程序的灵魂,功能是啥实现的?函数!以前所学的基础数据类型,算法,各种技术最后都是用在函数上,我写到这的时候想到,还有类,他俩谁重要,最后总结出来,类的功能模块就是函数,函数是类的基础,成员函数来操作基础数据成员(类型),很多成员函数构成类,类来初始化对象,对象可以用来描述具体的事物,这样推出来,我们为什么写程序,以及函数在程序中的地位就一目了然了!**函数的各种格式的总结**(这里不写实现,只写单纯的原型)
void    func1();//用途:输出信息void    func2(int i);//传入一个参数用来处理void    func3(int i,double b);//传入两个不同的参数来处理void    func4(int *p,int n);//可以传入数组名,与长度void    func5(int p[][4],int n);//二维数组 与前面空着的长度void    func6(struct  p,int n);//结构体按值传递void    func7(struct  &s,int n);//结构体按引用传递void    func8(int  &i);//单个参数按引用传递void    func9(char *p,int n);//字符数组的传递void    func10(char *(*p)[],int n);//指向指针的指针void    func11(class  p,int n);//类对象 按值传递void    func12(class  &s,int n);//类对象 按地址传递void    func13(char *&p,int n);//数组引用传递void    func14(const int *i);//不可以修改值,但是可以改                        //变他指向的地址void    func15(int  const i*);//与上面的相反,可以改变值//,但是不可以改变他指向的地址void    func16(const int const i);//既不可以改变他的值 也不可以改变他的地址

.应用函数应该注意的事项
(1)参数的类型,实参应该与形参参数类型相同,才可以进行调用,可以根据形参的个数与形参的类型在函数名不发生变化的情况下重载函数,下面有讲到。
(2)注意调用的函数名一定要写对,函数的名字尽量起一些见名知义的,比如我第一个函数写的ShowAllInfo,大致意思是显示所有信息,很明显和我的功能求和不相符,这是一个教训,下面的我图方便起了一些鬼字母,大家一定不要这样,程序的严谨性从我做起。
(3)返回值的类型也要严谨的一点 ,他是和return的返回的类型是相同的。
(4)函数其实很有趣,里面的内容可以千变万化,但是他的接口(参数,返回值)也同样重要,我们要灵活运用.

.下面我们来看一下,值传递与地址传递的区别,就以交换函数为例,分别以变量,指针,数组的形式进行传值与讲解;
(1).变量的传递
代码结果如下:

#include "stdafx.h"#include<iostream>using namespace std;void    ExchangeValue(int one_value,int two_value);int _tmain(int argc, _TCHAR* argv[]){    int  one=2;    int  two=4;    ExchangeValue(one,two);    cout<<"one:"<<one<<endl;    cout<<"two:"<<two<<endl;    cin.get();    system("pause");    return 0;}void    ExchangeValue(int one_value,int two_value){    int temp;    temp=one_value;    one_value=two_value;    two_value=temp;};

结果:这里写图片描述
调试:根据调试发现在函数内,执行完函数,两个值交换了这里写图片描述
但是当使用完函数之后,结果并没有交换!!!
(2).指针传递参数
代码结果如下:

// 20171111_Coc.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;void    ExchangePointer(int *one_value,int *two_value);int _tmain(int argc, _TCHAR* argv[]){    int  one=2;    int  two=4;    int  *p_one=&one;    int  *p_two=&two;    ExchangePointer(p_one,p_two);    cout<<"one:"<<one<<endl;    cout<<"two:"<<two<<endl;    cout<<"p_one:"<<*p_one<<endl;    cout<<"p_two:"<<*p_two<<endl;    cin.get();    system("pause");    return 0;}void    ExchangePointer(int *one_value,int *two_value){    int temp;    temp=*one_value;    *one_value=*two_value;    *two_value=temp;};结果如下:![没有传递]   参数一:4 参数二:2  指针一:4  指针二:2交换成功

(3).引用传递参数
代码结果如下:

// 20171111_Coc.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;void    ExchangeQuote(int &one_value,int &two_value);int _tmain(int argc, _TCHAR* argv[]){    int  one=2;    int  two=4;    ExchangeQuote(one,two);    cout<<"one:"<<one<<endl;    cout<<"two:"<<two<<endl;    cin.get();    system("pause");    return 0;}void    ExchangeQuote(int &one_value,int &two_value){    int temp;    temp=one_value;    one_value=two_value;    two_value=temp;};

结果如下:
这里写图片描述
交换成功

最后将讲解前三个程序的代码
解析:第一个程序是参数的值传递,传过去的是变量的副本,不会对原有变量进行修改,这也是一种保护,所以再显示的时候没有将在函数内已经修改的变量显示出来,还是原来的数值,第二个程序用的是指针,其实说到底也是值传递,只不过这次将第一个程序的值改变为地址,函数内将两个指针地址所指的值交换了,所以再表面上交换了ab的值,实则不然,只有最后一个引用,改变的是原变量的别名,导致变量也修改了。