C/C++基础知识总结——函数
1. 随机函数的使用
1.1 头文件: # include <cstdlib> 或 # include <stdlib.h>
1.2 用法
srand(int seed);//伪随机,传随机种子
int d = 1 + rand()%6;//生成1-6随机数
2. 函数的参数传递
2.1 函数未被调用时,函数的形参不占有内存空间,也没有实际的值。只有在函数被调用时才为形参分配存储单元,并将形参与实参结合
2.2 值传递
(1) 值传递是发生函数调用时,为形参分配空间,并用实参来初始化形参。一旦形参获得值,与实参再无关系,不会影响到实参
2.3 引用传递
(1) 引用是一种特殊类型的变量,可以被认为是另一个变量的别名,内存空间是一样的
(2) 声明一个引用时,必须初始化,使他指向一个已经存在的对象
int i;
int &r1 = i;
(3) 一旦一个引用被初始化后不能改为指向其他对象
(4) 应用可以作为形参,在调用函数时对形参进行初始化,这样形参就成为实参的一个别名,对形参的操作影响实参。
2.4 地址(指针)传递
3. 内联函数
3.1 对于一些功能简单,规模较小的函数,且经常重复使用的函数,可以设计为内联函数
3.2 内联函数不是在调用时发生转移而是在编译的时候将函数体嵌入在调用处
3.3 用法
(1) inline 类型说明符 函数名(形参)
{
语句;
}
3.4 与宏定义的区别
(1)内联函数和普通函数相比可以加快程序运行速度,因为不需要中断调用,在编译的时候可以直接镶嵌到目标代码中。宏只是一个简单的替换
(2)内联函数需要做类型检查,这是内联函数跟宏相比的优势
(3)inline是指嵌入代码,在调用函数的时候不是跳转,而是直接把代码写到那里去。对于短小代码来说,inline可以带来一定效率的提升,而且和宏相比, inline更安全。但是以消耗空间为代价的。宏是在代码处不加任何验证的简单替代,宏不是函数。inline是函数,但在编译中不产生代码,而是将有关代 码嵌入到调用处
(4)宏在C语言中非常重要,在C++中就没那么重要了。宏的第一条规则是:绝不应该使用它,除非必须这么做。几乎每个宏都表明了程序设计语言里、 程序里或者程序员的一个缺陷,因为它将在编译器看到程序正文之前重新摆布这些正文。
4. 带默认参数的形参
4.1 有默认值的形参必须在参数表最后,这个比较好理解
4.2 在相同的作用域里,不允许在同一个函数的多个声明中对同一个参数的默认值重复定义,即使前后定义的值相同也不行
int add(int x = 5; int y = 6);//声明时可以默认值,同作用域的其他声明不能有
int main()
{
add();
return 0;
}
int add(int x /* = 5 */, int y /* = 6 */) //定义时不能有默认值
{
//这里不能再出现默认形参,但为了清晰,可以通过注释来说明
return x +y;
}