导航

C++学习笔记(11)函数

Posted on 2015-07-07 15:01  Charles__Wang  阅读(184)  评论(0)    收藏  举报

一、函数操作 

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<string>
 4 using std::cout;
 5 using std::cin;
 6 using std::endl;
 7 using std::string;
 8 int fact(int);//如果没有这句话会提示找不到标识符,也可以把fact函数放在main函数前面
 9 int _tmain(int argc, _TCHAR* argv[])
10 {
11     int num,result;
12     cin>>num;
13     result =  fact(num);//实参
14     cout<<num<<"的阶乘结果为:"<<result<<endl;
15     system("pause");
16     return 0;
17 }
18 int fact(int num)//形参
19 {
20     int i = 1;
21     while (num >1)
22     {
23         i*=num--;
24     }
25     return i;
26 }

 二、局部对象

  (1)局部变量:形参和函数体内定义的变量统称为局部变量

  (2)自动对象:只存在于块执行期间的对象统称为自动对象

  (3)局部静态对象:存在于函数体并且在函数体结束后其值仍存在的对象统称为局部静态对象

三、参数传递

  (1)指针参数 

 1 void reset(int *p)
 2 {
 3     *p = 0;
 4 }
 5 
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     int num = 10;
 9     int *p = &num;
10     reset(p);
11     cout<<num<<endl;//0
12     system("pause");
13     return 0;
14 }

四、引用参数:使用引用参数可以避免拷贝

 1 void set(int &a)
 2 {
 3     a = 0;
 4 }
 5 
 6 int _tmain(int argc, _TCHAR* argv[])
 7 {
 8     int num = 10;
 9     set(num);
10     cout<<num<<endl;
11     system("pause");
12     return 0;
13 }

五、在引用时,形参尽量使用常量引用const。这样可以确保实参的范围更大,避免误解。

六、数组参数:数组的特征:(1)不能拷贝(2)使用数组时通常转换成指针

  管理数组指针形参的三种技术:

        (1)使用标记指定数组长度:要求数组本身包含一个结束符,例如C风格字符串数组结束有一个空字符

        (2)使用标准库规范:传递数组首元素和尾元素的指针int a[];begin(a);end(a);

        (3)传递一个数组大小的形参int a[]; end(a)-begin(a);

七、含有可变形参的函数

  (1)如果所有的参数类型相同,可以传递一个名为initializer_list的标准库类型

  (2)如果形参类型不同,可以使用可变参数模板

  (3)省略符形参 void fundation(int a,...); void f(...); 

八、返回值类型

  注:不要返回局部变量的引用和指针,字面值是一个局部临时量;

九、函数重载

  同一作用域函数名相同参数不同称之为重载;

十、内联函数和constexpr函数

  内联函数inline用于优化规模较小、流程直接、频繁调用的函数

  constexpr常量表达式函数,函数的返回值类型及所有形参的类型都要是字面值类型

十一、预处理宏assert和预处理变量NDEBUG