C++基础--函数

141 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

函数基础

  • 1、返回类型
  • 2、函数名称
  • 3、参数:参数列表包含函数参数的类型 顺序、数量。参数是可选的

函数重载

头文件中声明 stdafx.h

int test(int a);
int test(double a);

namespace otherTest {
	int test(int a);
}

源文件中实现 stdafx.cpp

int test(int a) {
	return a;
}

int test(double a) {
	return (int)a;
}

namespace otherTest {
	int test(int a) {
		return a + 1;
	}
}

引用

#include "stdafx.h"
int main()
{
	int a = 3;
	double c = 14.0;
        cout << test(a) << endl;
        cout << test(c) << endl;
        cout << otherTest::test(a) << endl;
}

命名空间

关键词: using和namespace的使用

函数指针与返回指针的函数

函数指针

定义:每一个函数都占用一段内存单元,他们由一个起始地址,指向函数入口地址的指针

一般形式: 数据类型(*指针变量名)(参数表)

eg:int(*p)(int);

注意:

函数指针

int(*p)(int);//是指针,指向一个函数入口地址

返回指针的函数

int* p(int);//是函数,返回的值是一个指针

#include <string>
#include <iostream>

using namespace std;

int max(int a, int b) {
    return a > b ? a : b;
}

int min(int a, int b) {
    return a < b ? a : b;
}

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

/* int(*p)(int a, int b) 函数指针(回调函数)*/
int processNum(int x, int y, int(*p)(int a, int b)) {
    return  p(x, y);
}

int main()
{
    int a = 3;
    int b = 4;

    cout << processNum(a, b, max)<< endl;
    cout << processNum(a, b, min) << endl;
    cout << processNum(a, b, add) << endl;
    return 0;
}

打印 4 3 7

函数主体

函数主体:函数主体包含一组定义函数执行任务的语句

内联函数

内联函数:为了解决程序中函数调用的效率问题;

注意:内敛函数内部不能有太复杂的逻辑。编译器又是会有自己的优化策略,所以内敛不一定起作用。

递归

斐波那契数列

四个基本准则

  • 基准情形:无须递归就能解出
  • 不断推进:每一次递归调用都必须使求解状况朝接近基准情形的方向推进;
  • 设计法则:假设所有的递归调用都能运行
  • 合成效益法则:求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作

递归最大的缺陷

  • 在栈上开辟大量的空间
  • 时间上可能需要大量的重复运算

递归的优化

  • 尾递归: 所有递归形式的调用都出现在函数的末尾
  • 使用循环代替
  • 使用动态规划 空间换时间