c++学习笔记05 函数

简介: C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。

函数的基本格式

返回值类型 函数名(传入形式参数列表)
{
   
   
    函数体语句

    return 表达式
}

例子:

//加法
int add(int num1, int num2)
{
   
   
    int sum = num1 + num2;
    return sum;
}

返回值类型:程序要返回的值的类型
函数名:函数名称
传入参数列表:传入函数的数据集
函数体语句:在函数内具体执行的内容
return表达式:和前面定义的返回值类型相关,返回相应的数据
重点:
1.值传递:int add(int num1, int num2)中的num1和num2是形参,而主程序中调用该函数时会将实参值传递给形参,存储在其他的内存空间当中,不会影响原本内存空间的值

值传递只传递值,形参发生改变时不会影响实参(即实参不改变)

2.在不传入参数时,函数无法直接调用主程序中的变量
错误案例:主程序中有变量c与d

void direct_swap()
{
   
   
    int temp = c;
    c = d;
    d = temp;
}
void swap(int a, int b)
{
   
   
cout << "形参改变前:" << a << " " << b << endl;
int temp = a;
a = b;
b = temp;
cout <<"形参改变后:"<<a << " " << b<<endl;
}
//主函数
int c = 3, d = 5;
cout << "实参:" << c << " " << d<<endl;
swap(c, d);
cout << "实参:" << c << " " << d<<endl;

运行结果:
在这里插入图片描述

}
特殊情况:不需要返回值时,返回值类型为void

函数的声明

当把函数A写在main函数的后面时,需要在main函数前对函数A进行声明(declaration)
在main函数后所写的真正的函数A被称作定义(definition)
声明可以写多次,定义只能写一次

示例:

//写在主程序前的声明 declaration
int max(int a,int b);
int main()
{
   
   
    主程序
}

//写在主程序后的函数max 的真正定义 definition
int max(int a, int b)
{
   
   
    return a > b ? a : b;
}

函数和主程序在不同文件中

当代码量很大的时候,函数会放在不同的文件中
分文件编写的步骤:

1.创建后缀为.h 函数的头文件
2.创建后缀为.cpp 函数的源文件
3.在头文件中include源文件会用到的库,并写函数声明declaration
4.在源文件中include头文件(将头文件和源文件连接),并写函数的定义definition
5.在主文件中引用函数的头文件,然后在主程序中调用函数

示例:后缀为.h的函数的头文件
示例头文件的完整名称是swap.h

#pragma once //用于保证同一个物理意义上的头文件不会被include多次,另一种用法是#ifndef
#include <iostream>//调用函数会用到的库
using namespace std;
void swap(int a, int b);//函数的声明

注意:#pragma once //用于保证同一个物理意义上的头文件不会被include多次,另一种用法是#ifndef

示例:后缀为.cpp的函数的源文件
示例源文件的完整名称是函数swap的源文件.cpp
可见头文件不一定和函数源文件名称相同,两者之间有将两者联系在一起的连接

#include "swap.h"//引用函数的头文件,此处将头文件与源文件连接起来
void swap(int a, int b)
{
   
   
    cout << "形参改变前:" << a << " " << b << endl;
    int temp = a;
    a = b;
    b = temp;
    cout << "形参改变后:" << a << " " << b << endl;
}

示例:后缀为.cpp的主文件
示例主文件名称是:函数分文件编写的主程序.cpp

//#include<iostream>
//using namespace std;
#include "swap.h"
int main()
{
   
   
    int a = 10, b = 20;
    cout << "test the #include<iostream> and using namespace std;"<<endl;
    swap(a, b);
}

从主程序可知,以下两条已经包含在swap函数的头文件swap.h内了,如果确定已经存在的话主程序可以不写,如果不确定则可以写出来,prgma once会将多次提及的多余的头文件不被include

#include<iostream>
using namespace std;
目录
相关文章
|
2月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
2月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
89 6
|
2月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
46 0
|
2月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
39 3
|
2月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
410 1
|
2月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
53 1
|
2月前
|
安全 编译器 C++
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
27 3
|
2月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
71 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(二)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作
|
2月前
|
存储 编译器 C++
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作(三)
【C++】掌握C++类的六个默认成员函数:实现高效内存管理与对象操作