首页 > 其他分享 >函数的详解

函数的详解

时间:2024-03-22 20:31:09浏览次数:26  
标签:头文件 函数 详解 printf return 实参 库函数

目录

1. 函数的概念

2. 库函数

2.1 库函数的概念

2.2 标准库和头文件

2.3 库函数的使用方法

2.4 头文件包含

2.5 库函数文档的一般格式

3. 自定义函数

3.1 函数的与法形式

3.2 函数举例

4. 实参和形参

4.1 实参

4.2 形参

5. return 语句

6. 嵌套调用和链式访问

6.1 嵌套调用

6.2 链式访问


1. 函数的概念

数学中函数的概念:它描述了一个输入值与一个或多个输出值之间的对应关系。比如:一次函数 y=kx+b ,k和b都是常数,给一个任意的x,就得到一个y值。

其实在C语言也引入函数(function)的概念,有些翻译为:子程序,子程序这种翻译更加准确一些。 C语言中的函数就是⼀个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。

在C语言中我们一般会见到两类函数:  库函数和自定义函数。

2. 库函数

2.1 库函数的概念

C语言标准中规定了C语言的各种语法规则,C语言并不提供库函数;C语言的国际标准ANSIC规定了一 些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSIC提供的C语言标准就给出了一系列函数的实现。这些函数就被称为库函数。

2.2 标准库和头文件

各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能的划分,都在不同的头文件中进行了声明。

库函数相关头文件:https://zh.cppreference.com/w/c/header

2.3 库函数的使用方法

参考:

C/C++官方的链接:https://zh.cppreference.com/w/c/header

cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

2.4 头文件包含

库函数是在标准库中对应的头文件中声明的,所以库函数的使用,务必包含对应的头文件,不包含头文件是可能会出现⼀些问题的。

举例:16的开方(sqrt是开方的意思)

未包含sqrt的头文件:#include <math.h> (sqrt是开方的意思)

包含头文件,该程序就正常运行了。

2.5 库函数文档的一般格式

1. 函数原型

2. 函数功能介绍

3. 参数和返回类型说明

4. 代码举例

5. 代码输出

6. 相关知识链接

3. 自定义函数

3.1 函数的与法形式

lin_type 是函数返回类型

 fun_name 是函数名

 括号中放的是形式参数

 {}括起来的是函数体

3.2 函数举例

例子:写一个加法函数,完成2个整型变量的加法操作

我们根据要完成的功能,给函数取名:Add,函数Add需要接收2个整型类型的参数(int x,int y),函数计算的结果也是整型(int)。

4. 实参和形参

使用函数的过程中,把函数的参数分为实参和形参。

如刚刚的代码:

4.1 实参

我们把第15行调调Add函数时,传递给函数的参数a和b,称为实际参数,简称实参。

实际参数就是真实传递给函数的参数。

4.2 形参

在上面代码中,第24定义函数的时候,在函数名 Add 后的括号中写的 x 和 y ,称为形式参数,简称形参。

为什么叫形式参数呢?

实际上,如果只是定义了 Add 函数,而不去调用的话, Add 函数的参数 x 和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。

4.3 实参和形参的关系

实参和形参之间是有联系的,但是形参和实参是独立的内存空间。

我们在调试的时候可以观察到,x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不一样的,所以我们可以理解为形参是实参的⼀份临时拷贝。

5. return 语句

函数return语句使用的注意事项:

1 return后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达     式的结果

 2 return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。

3  return语句执行后,函数就彻底返回,后边的代码不再执行

4  如果函数中存在if等分句的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

6. 嵌套调用和链式访问

6.1 嵌套调用

嵌套调用就是函数之间的互相调用

例子:

这段代码中有不少函数调用

main函数调用了line1, line2 和line3

line3函数调用了line4函数

6.2 链式访问

链式访问就是将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数 的链式访问

例子:

#include <stdio.h>
int main()
{
 printf("%d", printf("%d", printf("%d", 43)));
 return 0;
}

第一个printf打印的是第二个printf的返回值,第二个printf打印的是第三个 printf的返回值。

第三个printf打印43,在屏幕上打印2个字符,再返回2。

第二个printf打印2,在屏幕上打印1个字符,再返回1。

第⼀个printf打印1。

所以屏幕上最终打印:4321

标签:头文件,函数,详解,printf,return,实参,库函数
From: https://blog.csdn.net/2301_81526792/article/details/136914686

相关文章

  • 开源计算机视觉库OpenCV详解
    OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉和机器学习软件库。OpenCV最初由Intel开发,后来支持由WillowGarage和Itseez(被Intel收购)进行的维护和更新。这个库旨在为实时的计算机视觉应用提供一个高效的、易于使用的环境,并且是用C++编写的,尽管它提供了......
  • 【C语言】结构体详解
    文章目录1、前言2、结构体变量的创建和初始3、结构体的特殊声明3、结构体的自引用5、结构体的内存对齐5.1对齐规则5.2为什么存在内存对齐?5.3修改对齐数6、结构体实现位段6.1什么是位段6.2位段的内存分配6.3位段的跨平台问题6.4位段的应用6.5位段使用的注意事项......
  • C++ 指针,指针引用,二级指针作为实参传入函数体,形参改变指向的问题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、形参指向变化,实参指向不变二、指针引用传递改变实参指向三、二级指针**传递改变实参指向一、形参指向变化,实参指向不变前提了解:无论是值传递,指针传递,引用传递,形参和实参都是完全不同的......
  • [C++提高编程](一):模板----函数模板
    目录函数模板作用函数模板的语法注意事项普通函数与函数模板的区别普通函数与函数模板的调用规则模板的局限性案例--通用数组选择排序从大到小模板是C++中泛型编程的基础,一个模板就是一个创建类或函数的蓝图或者公式。函数模板作用建立一个通用函数,其函数返回值类型......
  • 【BFS】(代码详解)
    全面学习BFS的可以参照以下路径,本文章只附上部分代码的解释作为学习记录共勉(星星眼)原文链接:https://blog.csdn.net/m0_62881629/article/details/125072287给定一个n×mn×m的二维整数数组,用来表示一个迷宫,数组中只包含00或11,其中00表示可以走的路,11表示不可通过......
  • 吴恩达2022机器学习专项课程(一) 3.5 可视化成本函数
    问题预览为什么要可视化成本函数?可视化之后的成本函数是什么样子?如何在三维空间里通过w和b找到一个成本函数的值?如何在三维空间里找到成本函数的最小值?解读可视化成本函数:为了更加方便的看到不同的w和b,是如何影响成本函数的。上节课只看到了w如何影响成本函数,这节课回归......
  • Vue 的父组件和子组件生命周期钩子函数执行顺序?
    Vue的父组件和子组件生命周期钩子函数执行顺序可以归类为以下4部分:加载渲染过程父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted子组件更新过程父beforeUpdate->子beforeUpdat......
  • 开窗函数进阶last_value特别地方
    有了开窗函数,让我们做统计方便很多。row_number(),sum,等常规用法,便不在这里讲。我们从一个问题开始withabcas(select1asidunionallselect2unionallselect3unionallselect4)selectid,FIRST_VALUE(id)over(orderbyid)asfirstid,LAST_VALUE(id)o......
  • java:欧拉公式e^ix==cosx+i*sinx 用Math类中的方法输出90°以内的欧拉函数数值,保留四位
    publicclassMain{//本题的要求:e^ix==cosx+i*sinxdoubleb,c;chari;publicstaticvoidmain(String[]args){for(doublej=0;j<90;j++){//用循环依次整出0-90度doublesum=0;//temp是e^ix;doublea=j;a=Math.toRadi......
  • STM32 AD单通道函数设计
    单片机学习!目录文章目录前言一、ADC配置步骤二、详细步骤2.1开启RCC时钟2.2配置GPIO2.3 配置多路开关2.4 配置ADC转换器2.5 开启ADC电源2.6 ADC进行校准        2.6.1复位校准        2.6.2等待复位校准完成    2.6.3开始......