函数的概念

一个函数由:函数的返回值类型、函数名、参数表、函数体 这4个部分组成。

int  Add(  int   _a , int   _b  )
{return _a + _b;
}

该函数 Add 完成对两个整型数据的求和功能。

函数的调用方式: 函数名(参数表);

在代码区键入如下代码,观察程序运行结果

#include<iostream>using namespace std;int  Add(  int   _a , int   _b  ){return _a + _b;}void  main()
{int iResult = Add(3, 5);    // 该行既为函数的调用cout<<iResult<<endl;system(“pause”);}

函数的定义,声明、实现

函数的定义:该函数出现的时候就具有返回值、函数名、参数表、函数体

在代码区键入如下代码,观察运行结果:

#include <iostream>using namespace std;void GetSum(  int _a , int _b )
{cout<<"两数之和为:"<<_a+_b<<endl;}void main()
{GetSum(3,5);system("pause");}

如果代码变为如下样子,是否有问题?

#include <iostream>using namespace std;void GetSum(int, int);void main()
{GetSum(3,5);system("pause");}void GetSum(  int _a , int _b )
{cout<<"两数之和为:"<<_a+_b<<endl;}

如果代码变为如下样子,是否有问题?

#include <iostream>
using namespace std;void main()
{void GetSum(  int _a , int _b ){cout<<"两数之和为:"<<_a+_b<<endl;}GetSum(3,5);system("pause");}


函数的声明:该函数出现的时候只具有返回值、函数名、参数表,但是缺少函数体,而以分号作为结尾

函数的实现:在声明过一个函数之后,我们为其添加函数体的过程

在代码区键入如下代码,观察运行结果

#include <iostream>
using namespace std;void GetSum(  int, int);     // 声明一个函数void main()
{GetSum(3,5);        //调用一个已经声明过的函数system("pause");}

代码修改如下,观察运行结果

#include <iostream>
using namespace std;void GetSum(  int  , int  );     // 函数的声明,在声明一个函数的时候我们可以不给出函数的形参名void main()
{GetSum(3,5);        //调用一个已经声明过的函数system("pause");}void GetSum(  int _a , int _b )     //函数的实现
{cout<<"两数之和为:"<<_a+_b<<endl;}

通过以上讲解可以看出:

  1. 一个函数既可以定义,也可以先声明,后实现
  2. 两种形式的函数在调用上无区别
  3. 函数的定义往往出现在程序结构相对简单的代码中
  4. 函数的声明、实现经常出现在代码需要拆分为 .h 与 .cpp两个文件中的情况(例如我们后面将要讲解的类,类的函数的声明出现在它的.h文件中,而该函数的实现往往出现在.cpp文件中)

一个函数:由函数返回值、函数名、参数表、函数体这四个部分组成

  1. 函数返回值:可以是任何基本数据类型。
  2. 函数名是由用户定义的标识符,需遵循C++标识符命名规则。
  3. 函数的参数表,由()中间的参数组成。参数是用于向函数传递数据的变量。
  4. 函数体为当前函数所能完成功能的复合语句。

注意:main函数是一个特殊的函数,它是C++的入口函数。


函数返回值可以是任何基本数据类型。

在代码区键入以下代码,编译并运行后查看结果

#include <iostream>
using namespace std;int   getSum(int _a , int _b)
{return _a+_b;}void main(){int iResult = getSum(3,5);cout<<"3+5 = "<<iResult<<endl;system("pause");
}

函数的返回值

将代码改写为如下,编译并运行后查看结果

#include <iostream>using namespace std;int   getSum(int _a , int _b)
{return _a+_b;}void main(){// int iResult = getSum(3,5);cout<<"3+5 = "<<getSum(3,5)<<endl;system("pause");}

在函数的返回值类型不是“void”的情况下,函数体内部必须至少存在一个“return”语句,用于返回必要的数据。

#include <iostream>
using namespace std;bool playerIsDead(int   _hp)
{if( _hp > 0 )return false;return true;
}
void main(){int iHP = 0;cout<<"请输入玩家HP:"<<endl;cin>>iHP;if( playerIsDead(iHP) )cout<<"玩家死亡"<<endl;elsecout<<"玩家存活"<<endl;system("pause");
}

注意:在函数内部需要分支返回的情况下,必须确保所有分支路径都具有返回值。否则程序将会提示警告:“不是所有路径都有返回值”

如果一个函数不需要返回任何数据,使用void作为函数的返回值

如果一个函数的返回值为void时,return语句可以省略。

在代码区键入以下代码,编译运行查看结果

#include <iostream>
using namespace std;void printArray( int _iArray[] , int _length ){for(int i = 0 ; i < _length ; ++i)cout<<_iArray[i]<<endl;
}
void main(){int iArray[10] = {1,2,3,4,5,6,7,8,9,10};printArray(iArray,10);system("pause");}


函数名

函数名的命名要遵循C++标识符的命名规则。

可以采取驼峰式命名规则:

如:

GetSum

PlayerIsDead

首个单词首字母小写,其他单词首字母大写


函数的参数表

函数的参数表由() 中间添加向该函数传递的参数组成。

参数是用于向函数传递数据的变量。

函数参数的()中可以没有任何参数,但是()不能省略

#include <iostream>
using namespace std;void main()
{cout<<"parameter"<<endl;system("pause");
}

函数的参数分为两种:形式参数(形参)、实际参数(实参)

形参出现在函数声明或定义中,在整个函数体内都可以使用,离开该函数则不能使用。

实参出现在调用语句中,进入被调函数后,实参不能使用。

在代码区键入如下代码,编译并运行查看结果:

#include <iostream>
using namespace std;int getMax( int _a , int _b )        {return _a > _b ? _a: _b;
}void main()
{int iValue1 = 10 , iValue2 = 5;cout<<"较大的为:"<<getMax(iValue1,iValue2)<<endl;system("pause");}

函数的形参和实参具有以下特点:

  1. 形参变量只有在被调用时才分配内存单元,在调用结束时释放所分配的内存单元。
  2. 实参可以是常量、变量、表达式等。
  3. 实参和形参的数量和顺序应严格一致。

函数的缺省参数(默认参数、可选参数):

在函数的参数表中被赋以初始值的参数

函数可以在参数表中设置一个或多个参数的缺省值。

void Test( int  _a ,  int  _b = 4);

Test(); //正确

Test(10); //正确

Test(100,200); //正确

Test( , 200); //错误

函数调用时,实参表和形参表中的参数是按位置对应的。

缺省参数只能从后向前替代缺少的实参值。


如果我们将没有赋初始值的参数称之为:必选参数,那么当我们在定义一个函数的时候:

该函数的参数中必须同时既有必选参数,又有可选参数,它的定义形式一定为:

返回值 函数名(必选参数1,.,.,必选参数n,可选参数1,.,.,可选参数n)

void Test( ); //正确

void Test( int _a ); //正确

void Test( int _a , int _b = 0 ); //正确

void Test( int _a = 0 , int _b = 0 ); //正确

void Test( int _a = 0 , int _b ); //错误


函数体

函数体为当前函数所能完成功能的复合语句。

例如:该函数返回两个参数中较大的一个

int  getMax( int _a , int _b ) {if(_a > _b)return _a;elsereturn _b;}

今天主要讲解了函数的基本概念、函数的声明、实现、定义,函数的基本组成部分等函数相关的基本概念。

这些基本概念是我进行后续学习的基础。

学习资料领取:

https://pan.baidu.com/s/1VX_zb_eqWH_coos1ZB9QQw

提取码:w8st

学习从来都不是一个人的事,如果你感觉小编的这篇文章对你有帮助的话,可以关注小编首页和小编来一起学习C/C++语言,小编会持续更新后续的内容哦!!

system函数_自学C++基础教程【函数】相关推荐

  1. decode语句不能再嵌套_自学C++基础教程【流程控制语句】(for、while 、do while 语句 )...

    for语句 for语句是C++语言所提供的一种功能广泛的循环语句. 下图为for语句的标准形式: 表达式1:通常用于给循环变量赋初值,一般是赋值表达式. 表达式2:通常用于设立循环条件,一般为关系表达 ...

  2. python绘制直方图的函数_(六)pyplot基础图表函数(学习笔记)|python数据分析与展示...

    1.pyplot基础图表函数概述 2.pyplot图饼的绘制 3.pyplot直方图的绘制 4.pyplot极坐标图的绘制 5.pyplot散点图的绘制 6.单元小结 [网页链接[Python数据分析 ...

  3. 6-7 使用函数输出水仙花数_自学C++基础教程(输入输出2)

    与C++语言不同,C语言标准库提供了两个控制台格式化输入输出函数printf( ) 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据. printf()函数用来向标准输出 ...

  4. switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...

    switch语句:又被称之为 分支选择语句,它提供了一种更方便的方法来实现深层嵌套的if.else逻辑: switch语句先计算表达式的值,并逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表 ...

  5. c语言何编写自定义函数,C语言菜鸟基础教程之自定义函数

    C语言菜鸟基础教程之自定义函数 先动手编写程序: #include int add(int x, int y) { int z = x + y; return z; } int main() { in ...

  6. python自定义函数详解_python基础教程之自定义函数介绍

    函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以 ...

  7. c++如何让字符串重复输出_如何入门Python之自学python基础教程送你参考

    随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?这里整理了一些个人经验和Python入门教程供大家参考. 什么是算法 ...

  8. python中非可选参数_python基础教程函数参数

    python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些 ...

  9. python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...

    时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python) 发布时间:2019-01-10 00:02, 浏览次数:620 , 标签: Python 导读: 本文介绍了数据平稳 ...

最新文章

  1. mariadb 内存占用优化
  2. spring29: JdbcTemplate详解
  3. iOS 推送通知 客户端实现
  4. android搜索框功能实现_Android实现滑动解锁功能
  5. 转:VC++常用数据类型转换
  6. 连接设备不支持android,安卓手机不识别U盘、不能连接PC的处理方法
  7. 深度学习TF—9.循环神经网络RNN及其变体GRU、LSTM
  8. day19——常用正则表达式、re正则对象和正则匹配效率比较、编译正则对象
  9. 使用mustache js模板引擎
  10. 中巨伟业加密芯片—SMEC98SP (SE98)在产品授权生产防复制的应用方法
  11. javascript从入门到跑路-----小文的js学习笔记(6)-----三大流程控制语句---顺序控制、分支控制、循环控制
  12. 浅谈CMMI3认证从评估前准备到正式评估的全部过程
  13. mysql frm怎么打开_frm 文件怎么打开?
  14. python基础练习-人名最多数统计
  15. JQuery事件绑定解绑方法小结
  16. shp文件导入postgresql数据库
  17. LLM系列 | 01: 亲测ChatGPT最强竞品Claude,且无需翻墙、注册简单、免手机号
  18. laravel8 使用高德地图查询经纬度(输入地名获取经纬度)
  19. 对计算机网络的保密管理整改措施,保密工作自查整改报告
  20. sql语句-create table XXX select 和 insert into XXX select 语句的使用

热门文章

  1. C语言精度控制整形,C语言 凑算式 控制精度问题
  2. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  3. html5内联框去滚动条,如何优雅的实现内联滚动条(前端底部固定方法 )
  4. java随机产生坐标点_刚学JAVA不久,问一下怎么把这个程序实现随机啊,不是按照坐标...
  5. hdu 1811Rank of Tetris (并查集 + 拓扑排序)
  6. mysql 升级 openssl_【1分钟教程】LNMP架构应用实战 Openssl升级操作
  7. AI编译器与传统编译器的联系与区别
  8. xargs 命令教程
  9. java期末试题c卷,JAVA程序设计期末考试试卷及参考答案
  10. Python二级笔记(15)