首页 > 编程语言 >函数是什么?C++函数详解!

函数是什么?C++函数详解!

时间:2024-03-26 12:30:31浏览次数:19  
标签:return 函数 int 数据类型 C++ 详解 返回值 声明

1、函数的声明和定义

在复杂的程序中,如果全部的代码都写在main函数中,main函数体将非常庞大臃肿。

把任务分工到其它的函数中,main函数只负责程序的核心流程,具体的任务由其它函数完成。

这种思想就是模块化编程。

声明和定义函数的语法:
返回值的数据类型 函数名(参数一的数据类型 参数一, 参数二的数据类型 参数二,……)
{
    实现函数功能的代码。
    return 返回值;
}

函数的声明:让编译器知道函数的存在,包括返回值的数据类型、函数名和参数列表。

函数的定义:函数的实现过程。

注意:
(1)函数的声明和定义可以书写在一起,也可以分开,如果书写在一起,一般放在main函数的上面,如果分开,一般在main函数的上面声明,在main函数的下面定义。
(2)如果函数的声明和定义分开书写,函数的声明后面一定要有分号,函数的定义后面一定不能写分号。
(3)在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。
(4)函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
(5)return语句返回值的数据类型必须与函数的声明一致。
(6)在函数体中,return语句可以多次使用。
(7)如果函数的重点是实现功能,不关心返回值,返回值的数据类型填void,return语句后面就空着。
(8)函数可以没有任何参数。
(9)函数名是标识符,必须满足标识符的命名规则。
(10)在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么书写。

#include <iostream>
using namespace std;

//函数的声明和定义分开书写,声明需要放在main函数的上面
int fun1();     //如果函数的声明和定义分开书写,函数的声明后面一定要有分号

//如果函数的声明和定义书写在一起,一般放在main函数的上面
int fun2()
{
    return 2;
}

//函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
int fun2(void* p)
{
    return 22;
}

//return语句返回值的数据类型必须与函数的声明一致。
int fun3()
{
    return "hello"; //报错了,函数的数据类型是 int,返回值却是 string
}

//在函数体中,return语句可以多次使用。
int fun4()
{
    return 4;
    return 4;
    return 4;
    return 4;
}

//如果函数的重点是实现功能,不关心返回值,返回值的数据类型填void,return语句后面就空着。
void fun5()
{
    return;
}

//在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么书写。
int fun6(int a);

int main(int argc, char ** argv)
{
    //函数的声明必须和函数的定义一致(返回值的数据类型、函数名和参数列表),如果函数名和参数列表不同,表示它们不是同一个函数。
    cout<< fun2() <<endl;           //输出 2
    cout<< fun2((void*)1) <<endl;   //输出 22
    
    return 0;
}

//函数的声明和定义分开书写,定义可以需要放在main函数的下面或上面均可
int fun1()
{
    return 1;
}       //如果函数的声明和定义分开书写,函数的定义后面一定不能写分号

//在同一个程序中,函数只需要声明和定义一次,也可以多次声明,但只能定义一次。
int fun1()  //多次定义,报错了
{
    return 1;
}

//在函数的声明和函数的定义中,参数命名可以不同,但是没必要这么书写。
int fun6(int b)
{
    return 6;
}

 2、函数的调用

语法:函数名(参数一,参数二,……)

注意:
(1)声明函数的代码必须放在调用之前,定义函数的代码可以放在调用之后。

#include <iostream>
using namespace std;

int myAdd(int a, int b);    //声明在调用之前

int main(int argc, char ** argv)
{
    //函数调用
    cout<< myAdd(10, 20) <<endl;    //输出 30
    
    return 0;
}

//定义在调用之后
int myAdd(int a, int b)
{
    return a + b;
}

(2)调用函数的时候,参数列表必须与函数的声明一致(参数的个数、书写的顺序和数据类型)。
(3)在普通函数中,可以调用其它的普通函数。

#include <iostream>
using namespace std;

int myAdd(int a, int b);    //声明在调用之前
int addFun(int a, int b);

int main()
{
    //函数调用
    cout<< myAdd(10, 20) <<endl;    //输出 30
    
    cout<< addFun(20, 30) <<endl;
    
    return 0;
}

int addFun(int a, int b)
{
    //可以在函数中调用其他函数
    return myAdd(a, b);
}

//定义在调用之后
int myAdd(int a, int b)
{
    return a + b;
}

(4)调用函数的代码可以独占一条语句,也可以用于表达式(赋值运算、算术运算、关系运算、函数的参数)。
(5)如果函数用于表达式中,返回值的数据类型要匹配(否则可能会被隐式转换或编译错误)。
(6)如果函数有返回值,可以不关心它,忽略它。

标签:return,函数,int,数据类型,C++,详解,返回值,声明
From: https://blog.csdn.net/m0_69452758/article/details/137037544

相关文章

  • Pandas基础之drop函数的使用
    drop方法的用法:drop(labels,axis=0,level=None,inplace=False)        -- axis为0时表示删除行,axis为1时表示删除列参数说明:labels:显示要删除的行或列的标签名axis:axis=0时按行删除,axis=1时按列删除level:代表标签所在的索引级别,一般不使用inplace:值为......
  • C++ 23 新特性概览之 标准库
    文章目录C++23新特性概览之标准库简介关于环境字符串格式化改进标准库模块`importstd``importstd.compat``basic_string(_view)::contains()`禁止从`nullptr`构造`string(_view)``basic_string::resize_and_overwrite(count,op)``std::optional`的链式调用`S......
  • C++11标准模板(STL) 算法(std::reverse)
    定义于头文件<algorithm>算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first,last) ,其中 last 指代要查询或修改的最后元素的后一个元素。逆转范围中的元素顺序std::reverse1)反转[first,last)范围中的元素顺序表......
  • C++ std::reverse函数
    函数原型,定义std::reverse定义于头文件 <algorithm>1(1)2template<classBidirIt>3voidreverse(BidirItfirst,BidirItlast);(C++20前)45template<classBidirIt>6constexprvoidreverse(BidirItfirst,BidirItlast);(C++20起)......
  • Springboot项目的main函数入口,如何像jar包一样接受参数
    一般来说,springboot项目是提供服务的,但是也可以用到导出jar来启动,那么如何介绍参数呢:packagecom.example.TestDemo;importcom.example.jmeter.bean.TestCaseResult;importcom.example.jmeter.controller.JmeterController;importlombok.extern.slf4j.Slf4j;importorg.......
  • pytorch中的张量函数
    troch.cat()&torch.stack().cat和.stack的区别在于cat会增加现有维度的值,可以理解为续接,stack会新加增加一个维度,可以理解为叠加x1=torch.tensor([[11,21,31],[21,31,41]],dtype=torch.int)x2=torch.tensor([[12,22,32],[22,32,42]])inputs=[x1,x2]R0......
  • SQL-部分函数替代
    SQL-优化部分函数替代方案:LIKE替换1.MSSQL替代函数MSSQL语法selectCHARINDEX(‘Zhang’,‘Devil_Zhang’)运行结果:72.MySQL替代函数MySQL语法selectinstr('Devil_Zhang','Zhang')运行结果:73.Oracle替代函数SELECT INSTR('012134','0121')FROMDUAL;运行......
  • 核心子方法6: registerBeanPostProcessors(beanFactory)方法详解
    先总结: 该方法用于创建并注册Bean后处理器,先获取创建beanFactory中的BeanPostProcessor, 排序后注册到beanFactory中(beanFactory.addBeanPostProcessor(postProcessor)), 用于后面创建bean对象时使用注: 这里不会调用执行BeanPostProcessor, 在创建bean对象getBean->doG......
  • 还写那么多函数?js简单封装,拿去用吧
    ;(function($){ varwprtTheme={ //Maininitfunction init:function(){ this.config(); this.events(); }, //Definevarsforcaching config:function(){ ......
  • 详解SSL证书系列(6)了解HTTP及网络基础
    使用HTTP协议访问Web你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗? Web页面当然不会凭空显示出来。根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源等信息,从而显示出Web页面。像这种通过发送请求然后获取服务器资源的Web......