介绍

  1. 函数能够完成特定任务的独立程序代码单元,语法构建了函数的结构和使用方式。
  2. 使用函数可以省去反复编写代码的痛苦,可以在不同的程序中使用它,使得程序模块化,从而提高了代码的可读性,可移植性,更方便后期修改、完善。
  3. 而函数又分为库函数和自定义函数。
  4. 库函数是c语言标准库提供的,自定义函数顾名思义就是自己创建函数。

库函数

首先分享一个库函数学习网站  https://legacy.cplusplus.com/

这是一个函数的使用方法。(翻译为机翻)

而引用一个库函数首先要引用头文件

int main()
{printf("Hello\n");return 0;
}

而如上图并没有引用头文件,就会提示外部符号从而无法完成编译。

当我引用头文件后程序就可以正常编译。

接下来我们就用这个网站学习函数吧

strcpy是一个拷贝函数,它的头文件是<string.h>可以将source里的字符串指向destination包括'\0',但是被指向数组应该保证大小足够长以包含字符串。

有了这些说明就可以尝试使用这个函数。

首先创建字符串数组,再创建一个用于拷贝的字符数组,接下来就使用strcmp函数,把arr1的内容拷贝到arr2,因为数组名本身就是地址所以不用指针。

而这个函数返回的是被指向数组的首地址,得到一个字符串的首地址就可以打印整个字符串。

又可以通过返回值来打印字符串。

因为它的返回值是一个指针变量接收所以创建了ret。

再来学一个memset函数。

通过介绍知道了它是一个填充内存块的函数。

头文件<string,h>

memset(指针,整型变量,整型变量);

自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数。

创建一个函数计算加法

加法计算首先创建两个变量,然后思考需要如何创建这个函数,它需不需要返回值,需要哪几个参数。

我用ret接收加法函数的返回值因为要求的值是整数所以是int,in_add同样是因为要返回一个整型,我传给函数了两个参数,函数相对应的需要创建两个整型参数来接受,然后通过return返回这个表达式的值,最后把这个值打印出来。

这个函数就相当于,遇到不会做的题时向他人求助,向他传达题目和问题。

之后就由对方来思考解答,最后给你转达一个答案。

再创建一个交换两个变量的函数

  1. 首先创建两个整型变量

2.因为只需要交换两个变量的位置,所以不需要返回值

虽然我写了出来并且没有报错,但是细看之下这两个数字并没有交换位置

为了寻找原因我选择调试

可是经过调试我却发现x,y确实交换了值,但是a,b却没有变化,直至函数结束也没有变化,明明上一个加法函数执行的好好的。

之后我发现加法函数只是把两个值相加,两个值的位置没有发生改变。

而这个函数是要交换两个变量,改变了它们两个的位置。

并且变量的作用域和生命周期,在进入函数时创建变量,出函数会自动销毁。

可以看出它们之间并没有联系。

这次调试我读取了它们的地址,代码执行到了打印环节。

它们的地址并不相同,所以即使我在函数内交换了它们的值,也并不会影响到主函数内的变量。

实际上变量在出函数时就销毁了,但是我并没有刷新所以地址保留了下来。

所以只要把它俩建立联系就可以解决了。

发现了问题原因就可以想办法解决了。

指针

是一个值为内存地址的变量或数据对象

内存

计算机中程序的运行都是在内存中进行的, 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节,内存中的每个字节都是按顺序编码的, 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

这里a是一个int类型的数组,12345每一个都有一个内存单元,int类型是4字节所以它们的地址按照这样的顺序排下去。

这一次我成功编译出了代码,并且成功执行完成交换。

在给函数传参时我使用了'&'取地址操作符,把他们的地址传给函数,并不像之前只是把值传了过去。

当这边传了地址对方当然要接受所以就要创建两个 int*  指针变量来接收地址。

交换两个值时,因为传过来的是变量的地址,所以不能直接使用。

'*'解引用操作符就派上了用场,通过解引用操作符就可以通过地址找到变量。

在这里*x==a,它们不仅变量相同并且地址也是相同的。

  1. 指针也就是地址。
  2. 口头语中指针,一般指指针变量

函数的参数

实际参数:函数调用圆括号中的表达式,可以是常量、变量、表达式、函数等,但是要有一个明确的值。

形式参数:函数定义的函数头中声明的变量,在函数调用时才分配内存,只在函数内部有效。

传值调用和传址调用

我创建的两个函数

第一个加法函数,它使用传值调用,对形参修改不会影响实参

第二个交换函数,它使用传值调用,使形参和实参产生联系,对形参进行修改会影响实参

函数,库函数,自定义函数相关推荐

  1. [C语言] 函数:库函数--自定义函数--函数的调用--练习--详解<个人>------(1)

    文章目录 前言 一. 函数是什么? 二. C语言中函数的分类 三. 库函数 四. 自定义函数 五. 函数的调用 六. 练习 总结 前言 本节内容主要记录函数的相关内容,其中包括:库函数,自定义函数,函 ...

  2. C语言 函数 (库函数 · 自定义函数 · 函数参数 · 函数调用 · 嵌套调用链式访问 · 递归)

    文章目录: 一.函数是什么? 二.库函数 2.1 为什么要有库函数? 2.2 如何学习库函数? 2.3 我们就以 strcpy( ) 函数,来参照文档自学一下: 2.4 总结: 三.自定义函数 3.1 ...

  3. C语言-函数(自定义函数)

    C语言中函数的分类: 1 库函数 2 自定义函数 自定义函数 如果库函数能干所有的事情,那还要程序员做什么? 所以更重要的是自定义函数 函数的组成: ret_type    fun_name (par ...

  4. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  5. pandas编写自定义函数、使用apply函数应用自定义函数基于Series数据生成新的dataframe

    pandas编写自定义函数.使用apply函数应用自定义函数基于Series数据生成新的dataframe 目录 pandas编写自定义函数.使用apply函

  6. 自定义_Excel中的自定义函数(自定义函数的基础内容)

    各位朋友,你们好. 最近和网友沟通交流Excel问题,好些问题都没法直接实现,因此用了很多自定义函数,也给头条里的朋友写过几个自定义函数(比如颜色计算的函数.提取不重复内容的函数.汉字转拼音的函数-- ...

  7. excel中DATE(year,month,day)函数——oracle自定义函数

    @oracle自定义函数写excel中DATE函数 oracle自定义函数写excel中DATE函数 EXCEL中DATE函数逻辑为DATE(year,month,day) 含义:DATE(年,月,日 ...

  8. 一文弄懂python中的函数(自定义函数,匿名函数,高阶函数与解析式)

    什么是函数,如何在 Python 程序中定义函数呢? 说白了,函数就是为了实现某一功能的代码段,只要写好以后,就可以重复利用. python中的自定义函数 Python 的函数具有非常灵活多样的参数形 ...

  9. 内置函数、自定义函数

    编程语言的函数都可以分为两类:内置函数和自定义函数. 内置函数分为 数字相关的内置函数 # abs(x) 求绝对值print(abs(-10)) #10 """ divm ...

  10. Hive函数(内置函数(字符串函数,数学函数,日期函数,集合函数,条件函数,聚合函数,表生成函数)和自定义函数(自定义函数创建流程,临时函数,永久函数)))(四)

    Hive函数(内置函数和自定义函数) 一.内置函数 1.字符串函数 (1)ascii (2)base64 (3)concat (4)concat_ws (5)format_number (6)subs ...

最新文章

  1. 2022-2028年中国毛纺行业研究及前瞻分析报告
  2. Android -- 消息处理机制源码分析(Looper,Handler,Message)
  3. m1mac安装linux,M1 Mac 能安装 Ubuntu 和 Linux 了 ??
  4. 加载顺序_JAVA类代码块和属性的加载顺序问题,不要以为静态块始终最先执行了!...
  5. Java Maven和Gradle构建的主题缓存
  6. node--更新数据库问题
  7. 动手设计 CPU(二)—— 微程序控制的运算器
  8. AD库文件(元件库+封装库+3D模型)
  9. Javascript中五种定义对象的方法
  10. npm环境报错解决方案
  11. 谁说门户已死?从世界杯看新浪的四大优势
  12. 微信隐藏功能:微信怎么群发消息给好友不建群?
  13. php自动加nofollow,WordPress自动给文章添加nofollow属性的实现方法
  14. 顾沛《抽象代数》2.0环、子环和商环习题解答
  15. 如何高效的进行空值的填充
  16. SpringCloud 基础教程(八)-Hystrix熔断器(上)
  17. 攻受音测试软件,我的攻受小瓶子测试游戏
  18. 腾讯面试,面试官第一个问题是Int占多少字节,程序员不知所措
  19. win10鼠标指针皮肤怎么设置
  20. 【代码】QQ群最近聊天记录做成词云

热门文章

  1. pytorch的代码 CPU改为GPU
  2. 华硕b560m-PLUS WIFI主板+i5 10400F平台安装Win7
  3. 华为无线ap由fit升级到fat的方法
  4. 蒙德里安森林算法_DP没入门就入土
  5. 高数_一元函数的定积分的应用
  6. Docker入门之路(一):部署Nginx
  7. 【数学】《离散数学中“群”的概念》
  8. stm32f769 寄存器配置SD卡---移植fatfs
  9. 系统集成项目管理工程师和信息系统管理工程师考试指南
  10. xp cmd命令大全