首页 > 其他分享 >C语言中的函数(大白话理解,超详细)

C语言中的函数(大白话理解,超详细)

时间:2024-11-14 22:14:21浏览次数:3  
标签:函数 大白话 int 形参 C语言 参数 printf 实参

1、函数是什么?

函数就是一种工具,你需要的时候就可以调用他,简化写代码的工作量
每个C语言程序至少有一个函数,即主函数main()

2、C语言中函数的分类

2.1、库函数

库函数:是预先编写好的、可供程序员直接使用的函数

注意:1、使用库函数必须包括#include对应的头文件(就是" "或< >里的.h文件),
因为要使用就头文件里面的东西(比如scanf,printf函数),就要声明(让编译器知道在哪个头文件里,然后调用)

库函数相关头文件https://zh.cppreference.com/w/c/header
(种类较多,慢慢学习一一攻克,配合题目学习)
库函数学习和查看工具
C/C++官方的链接:https://zh.cppreference.com/w/c/header
cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/

2.2、自定义函数

返回类型 函数名称( 参数 )
{
   函数体
}

返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
函数体:函数体包含一组定义函数执行任务的语句。
————————————————

原文链接:https://blog.csdn.net/i_r_o_n_m_a_n/article/details/122018751
补充:1、viod是不返回数值的类型的关键字
2、函数名称可以自己定义

3、函数的参数

3.1实际参数(实参)

实参就是调用函数时传递的那个参数。
实参可以是:常量,变量,表达式,函数等
无论是哪种类型的量,在进行函数调用时,他们必须都有确定的量,以便把这些值传给形参

3.2、形式参数(形参)

形参就是函数名后括号中的变量。
为什么叫形式参数呢?
实际上,如果只是定义了函数,而不去调用的话,函数的参数x和y只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。
形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化
小注意点:
思考:为什么一个用到指针,一个没有用?

//交换a,b的值                             //a,b值相加
#include<stdio.h>                        #include<stdio.h>
viod Swap(int*px,int*py)                 int Add(int x,int y)
{                                        {
     int z=0;                                int z=0;
     z=*px; //p可加可不加                     z=x+y;
     *px=*py;                                return z;
     *py=z;                               }
 }
int main()                               int main()
{                                        {
    int a=0;                                 int a=0;
    int b=0;                                 int b=0;
    scanf("%d%d",&a,&b);                     scnaf("%d%d",&a,&b);
    printf("a=%d,b=%d",a,b);                 int c=Add(a,b);  
    return 0;                                printf("c=%d",c);
}                                            return 0;
                                         }

当实参传给形参的时候,形参是实参的临时拷贝,对形参的修改不能改变实参

因为转换值的时候改变了数值,改变了实参
传参时是否要传地址取决于是否要改变实参的值,一个地址对应一个值,交换地址就交换了值
大白话:两个人到了不同宿舍,但是人不动,只是交换他们两个人的宿舍。在表里改变他们的宿舍,人没有直接移动

4、函数的调用

4.1、传值函数

将实参的值复制粘贴到函数中,实参值不变

4.2、传址调用(类似超链接)

传地址用指针接收,形参的指针里存的是实参的地址
传址函数将函数和函数外的变量建立联系,也就是函数内部可以直接操作函数外部变量(跟上面大白话理解相同)

4.3、

5、函数的嵌套调用和链式访问

5.1、嵌套调用

在这里插入图片描述
这不是嵌套函数,而是嵌套定义,不可嵌套定义

int Add(Sub(int x,int y),inty);

这样是可以的

5.2、链式访问

链式访问是通过函数的返回值作为另一个函数的参数被使用
在这里插入图片描述
为什么打印的是4321?
首先要知道printf返回值 返回的是所打印字符的个数
其次printf函数先打印输出,再将返回值给后面的函数 ,返回2(43是2个),2作为下一层printf打印的参数被打印出来,2是一个,所以打印1,最后呈现出来的是4321
不正确的函数写法
在这里插入图片描述
在这里插入图片描述
没有说明返回值,编译器只能返回printf的返回值
在这里插入图片描述
这样的写法就是说明main函数不需要参数
注意:使用链式访问前提是函数要有返回类型(一定要写),否则不能使用,类型是viod就无法实现链式访问

6、函数的声明和定义

6.1、函数的声明

1、告诉编译器有这个函数,叫什么,参数是什么。但存不存在取决于定义
2、一般放在前面
3、声明一般放在头文件中
意思是:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
函数的声明和定义分别放在不同地方,使用时放在头文件中#include"add.h"

6.2、函数的定义

在这里插入图片描述
将函数定义最好放前面,因为编译器从上到下扫描,可以正常运行,但是会警告
在这里插入图片描述
但在前面加上声明就不会报错

标签:函数,大白话,int,形参,C语言,参数,printf,实参
From: https://blog.csdn.net/Alivia_Sophia/article/details/143687132

相关文章

  • C++函数的返回值在内存中的传递过程及什么是虚拟内存,为什么要使用虚拟内存,虚拟内存可
    1) C++函数的返回值在内存中的传递过程在C++中,函数返回值在内存中的传递过程如下:基本数据类型返回值传递当函数返回基本数据类型(如`int`、`double`、`char`等)时,函数会将返回值存储在一个临时的寄存器中。然后,调用函数的地方会从这个寄存器中获取返回值,并将其存储到相应......
  • C语言期末必练题目——part 9(程序填空)
    6.下面程序的功能是在a数组中查找与x值相同的元素所在位置,请填空。   #include<stdio.h>       void main()        {inta[10],i,x;          printf(“input10integers:”);    for(i=0;i<10;i++)scanf(“%d”,......
  • 【Transformer】损失函数-交叉熵损失
    目录1.交叉熵损失的定义:2.输入:模型的输出分布和真实标签详细解释输入3.输出:损失值4.详细的步骤5.举例说明总结在《AttentionIsAllYouNeed》论文中的Transformer模型主要用于机器翻译任务。对于这样的序列生成任务(如翻译、文本生成等),模型的损失函数通常是交......
  • 激活函数
    一、正向传播和反向传播在模型训练过程中,是同时包含正向传播和反向传播的正向传播是模型根据输入数据和当前的参数(权重和偏置)计算预测输出的过程。例如,在一个图像分类神经网络模型中,输入是图像的像素数据,经过多个隐藏层的计算,最终在输出层得到预测的类别概率分布。反......
  • E45.【C语言】热心网友供题:打印数字金字塔
    目录1.题目题目描述输入说明输出说明输入样例输出样例注意2.自解分析​编辑红色区域的打印橙色区域的打印绿色区域的打印蓝色区域的打印代码不用动脑筋的代码能锻炼思维的代码1.题目题目描述给出10个数,要求以金字塔形式输出,10个数按顺序摆放在金字塔中......
  • 97.【C语言】数据结构之栈
    目录栈1.基本概念2.提炼要点3.概念选择题4.栈的实现栈初始化函数入栈函数出栈函数和栈顶函数栈顶函数栈销毁函数栈基本概念参见王爽老师的《汇编语言第四版》第56和57页节选一部分1.基本概念2.提炼要点1.定义:一种特殊的线性表,其只允许在固定的一端进行......
  • c语言知识点总结-字符串、思维导图
    字面串、字符串变量、字符串的读写、字符串中字符的访问、函数、字符串处理操作、字符串数组总结。文中链接:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/143772084锦黎pro-CSDN博客锦黎pro擅长c语言知识点总结、思维导图,等方面的知识https://blog.csdn.net/jilipro?......
  • Rust ?(Rust错误传播运算符?)(用于简化错误处理,自动将错误从函数中返回)(可恢复错误Result<T
    文章目录Rust错误传播运算符:深入理解与应用1.错误处理的基础1.1`Result`枚举1.2`Option`枚举2.错误传播运算符(`?`)2.1基本语法2.2工作原理1.检查返回值2.提取`Ok`值2.3错误传播示例3.错误传播与自定义错误类型(没仔细看)3.1定义自定义错误类型3.2自定义......
  • 关于变量的声明和定义、内部函数和外部函数
    关于变量的声明和定义一个函数一般由两部分组成:声明部分和执行语句。声明部分的作用:是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行声明。对于函数而言,声明和定义的区别是明显的,函数的声明是函数的原型,而函数的定义是对函数功能的定义。对被调用函数的声明是放在主调......
  • vite将工具函数js打包为npm包并发布
    创建vite项目,将vue依赖清除(因为是纯函数js)npmcreatevitepackage.json中vue的依赖都删掉,把src、public等目录都删掉;package.json文件如下{ "name":"tool",//npm包名 "private":false, "version":"0.0.0", "type":"modul......