成为C++高手之函数

什么是函数

我们写的是程序,程序里要有计算机能执行的指令,指令也叫代码。
代码放在哪里呢?写程序的时候,代码不能随便放,必放在函数里面。比如我们可以看到main这个函数,大括号里就是代码。

系统启动我们的程序后,首先执行的就是main函数里的代码。

函数并不是你写好了,它里面的代码就被执行,而是需要调用。执行一个函数的代码,叫做调用一个函数。

main函数里输出hello world就是调用了printf这个函数,而main函数是被系统调用的。

main函数叫入口函数,每个程序中main函数必须存在且唯一,绝不能再有第二个叫main的函数。main就是程序的大门,没有门的程序怎么能执行呢?

printf函数

输出文本就是printf函数干的,它是向控制台输出文本。它有更高级的功能:格式化输出文本。请思考以下问题:输出两个数相加等于和的形式,比如“5+6=11”的形式,怎么写?很简单,可以把算式直接写在字符串里:

    printf("5+6=11!\n");

那么,如果要输出55+6; 66+44; 33334234+90509435……我们总不能每个都自己算出它们的和,然后写成字符串吧?大家知道计算机是可以对数进行四则运算的。为什么不利用起来呢?但是如果把加法运算写到字符串里,计算机就不给算了。 要怎样才能让printf把和计算出来然后输出呢?只需要加一些“格式化标记”,比如字符串中要显示结果的位置,可以用一个“%d”表示这个位置要有一个整数,这个整数从哪里来呢,就要通过参数传进去:

    printf("5+6=11!\n");
    printf("5999+6767=%d!\n",5999+6767);
    printf("%d+%d=%d!\n",5999,6767,5999+6767);

可以看到把计算写到参数的位置了。执行printf函数时,先执行加法运算,再把其结果当作参数传给printf。

可以看到三条语句的不同,一条比一条智能。

每个格式化标记必须对应一个参数,而且是跟据位置一一对应的。

也可以看到printf函数有个特点:参数数量可变。这是一种特殊的函数,大部分函数的参数数量是不可变的。

格式化标志的作用一是占位,二是表示了如何去解释对应的参数,%d表示当作整数,%f表示当作浮点数,至于更多的格式化标志,请自行上网查找“printf输出格式”。

自定义函数

程序里面当然不能只有一个main函数,只在main函数里写所有代码,否则大程序的main函数会非常大,没法看了。可以定义任意数量的其它函数。定义函数四要素:返回值类型、名字、参数、代码。写一个最简单的函数:

  void func(){printf(“我是func”);}

这个函数虽然简单,但是四要素俱全,void是返回类型,void表示没有返回值,但不可省略;func是函数名,小括里是参数,当然这个没有参数,大括号里是函数体,只有一句。

可以定义任意数量的函数。函数可以随意调用其它函数(当然要符合程序逻辑的前提下),也可以自己调用自己(这叫递归,很危险)。但不要调用main函数啊!

参数的作用

通过printf函数可以体会一下参数的作用:给它传入不同的参数,就打印出不同的字符串。我们写一个自定义函数吧:两个数相加返回和,如果不用参数,函数是这样的:

int add(){
    return 234543+6346555;
}

不同的数相加要写不同的函数才行。但这显然太弱智了。而用参数后,变成这样:

int add(int a,int b){
    return a+b;
}

此函数可以被多次调用,计算不同数的和:

int he1 = add(33454,8888);
int he2 = add(909090,3234);

函数重用性提高了。参数保存了调用函数时传入的值。函数内可以变化的数据,就应该用参数传进来,这样一来函数的代码固定了,但却可以处理不同的数据。

函数定义时的参数叫形参,调用函数时传入的参数值叫实参,实参数量必须与形参一致并且位置一一对应并且类型相符。

函数定义与声明一定要严格区分,定义函数时,带有函数体(大括号),声明函数时,不带函数体。声明函数时,参数用不到,所以可以省略参数名。

函数声明就是说明函数长什么样,编译器就可以检查函数调用的地方语法对不对(实参数量对吗?参数类型对吗?接收返回值的变量类型对吗?等等)。

前置声明:A函数调用B函数,B函数必须在A函数上面定义。如果B在A下面定义,编译器会报错,说找不到B函数,可以把B函数的声明放在A函数上面,这样就OK了。

注意:定义会使函数有实体存在,运行时占用内存,而声明不会。

什么是变量

函数保存代码,变量保存数据。

定义一个变量的语法有三要素:类型,名字,初始值。

初始值很重要。虽然赋初始值不算错误,但其实很危险。可能会引起运行时的逻辑错误,这种错误更难找。

变量也分声明和定义。声明变量时,在变量类型前带关键字:extern,而且不能有初始值(当然不能有了,声明只是说明一个变量长什么样,并不会使变量实体存在)。

变量定义后会在内存中的某个位置占据一块区域。这块区域的大小由变量的类型决定。

变量的类型有:char,short,int,long,float,double,指针,结构等,具体的自己上网查吧。

(本系列文章请结合视频学习,地址:http://edu.csdn.net/course/detail/2057,欢迎C语言新人加入群 535807023 进行讨论)

上一篇:成为C++高手之第一个程序
下一篇:成为C++高手之轻松理解二进制

猜你喜欢

转载自blog.csdn.net/nkmnkm/article/details/51319654