接着上次的数组的基本知识,让我们来简单了解C语言里的函数。

目录

函数的定义

库函数

自定义函数

函数的参数

函数的调用:

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

函数的声明和定义

函数递归.

总结 


  • 函数的定义

函数就是一个大型程序中的某部分代码,由一个或多个语句块组成。负责完成某项特定任务,相较于其他代码,更具有独立性。

一般会有输入参数并有返回值,提供了对过程的封装和细节的隐藏。这些代码通常被集称为软件库。


  • 库函数

C语言为我们提供了上百个可调用的库函数,例如与字符串有关的 strlen, strcat, strlwr . 或是我们刚接触C语言时候用到的 printf, scanf, 这些都是c语言为我们提供的。在我们使用某一库函数的时候,需要在程序中嵌入(#include<>) 该函数所需要的头文件。
这也就是为什么我们在代码开头都需要写上#include <stdio.h>,因为 printf, scanf,getchar,gets,putchar()这些函数 (也称作标准I/O函数),都是在stdio头文件中

      2.常用的库函数有:

(1)IO函数

Input output(输入输出函数)

 (2)字符串操作函数

strlen(用来计算字符串长度的函数)

  (3)字符操作函数

                (4)内存操作函数

                       例: strcpy函数

原型:strcpy(str1,str2);

功能:将字符串str2复制到字符串str1中,并覆盖str1原始字符串,可以用来为字符串变量赋值

返回:str1

注意:1)字符串str2会覆盖str1中的全部字符,2)字符串str2的长度不能超过str1

char str1[] = "We are csdn!";
char str2[] = "Hello!";
strcpy_s(str1, str2); //str = Hello!

  • 自定义函数

        1.认识自定义函数

自定义函数和库函数一样,有函数名,返回值和函数类型。但是不一样的是这些都是我们自己来设计,有很大的发挥空间。

比如说这样我需要写一个计算输入n,求1到n之间数字的和。

#include<stdio.h>
//开始自定义一个函数
int sum1(int n)
{   int sum=0;for(int i=0;i<=n;i++){sum = sum + i;}return sum;//这里返回值是什么  这个自定义函数最终的得到值就是什么
}
//定义函数结束
//开始使用主函数进行调用
int  main()
{
int n=0,sum=0;
scanf("%d",&n);
sum=sum1(n)        //进行函数的调用
printf("%d",sum);
getchar();
return 0;
}

  • 函数的参数

    1. 实际参数(实参)

      1. 真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型量,在进行函数调用时,他们都必须有确定的值(可以是表达式,但是必须有定值),一边把这些值传送给形参。
    2. 形式参数(形参):
      1. 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),叫做形式参数。形式参数当函数调用完成后就自动销毁了。因此形式参数只在函数内有效
    3. 关系
      1. 当实参传给形参时,形参其实是实参的一份临时拷贝,对形参的修改时不会改变实参的

  • 函数的调用:

   1.传址调用

(1)传址调用时把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式;

这种传参方式可以让函数内部和函数外部的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量

    2.传值调用

(1)函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参。


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

    1. 嵌套调用

      #include<stdio.h>
      void  new_line()
      {printf("hehe\n");
      }
      void three_line()
      {int i=0;for(i=0;i<3;i++){new_line();//调用函数}
      }
      int main()
      {three_line();//调用函数return 0;
      }
      

          2.链式访问

把一个函数的返回值,作为另一个函数的参数。

#include<stdio.h>
#include<string.h>
int main()
{int len =0;//1len=strlen("abc");printf("%d\n",len);//2printf("%d\n",strlen("abc"));return 0;
}

  • 函数的声明和定义

函数的定义:定义在一个全新的源文件中。函数的定义是值函数的具体实现,交代函数的功能实现。

函数的声明:声明在一个全新的头文件(.h)中。

引用自己定义的文件用:#include“add.h”

1.函数的定义 

#include<stdio.h>
Add(int ,int );//函数声明
int main()
{int a=10;int b=20;int sum=0;//函数调用sum=Add(a,b);printf("%d",sum);return 0;
}
//函数的定义
int Add(int x,int y)
{int z=x+y;return z;
}

  2.函数的声明

告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,无关紧要。

函数的声明一般出现在函数的使用之前,要满足先声明后使用。

函数的声明一般要放在头文件中。

//#ifndef :为定义一个文件,若该文件已被使用 ,则声明无效
#ifndef _ADD_H_
#define _ADD_H_
//函数的声明
int Add(int x,int y);

  • 函数递归.

    1. 递归的条件

      1. 必须要存在限制条件,当满足这个限制条件时,递归便不再继续。
      2. 每次递归调用之后越来越接近这个条件
    2. 递归
      1. 程序调用自身的编程技巧 称为递归。
      2. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方式,它通常把一个答应复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归只需少量的程序就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。递归的主要思考方式在于:把大事化小。
    3. 例子
#include<stdio.h>
void print(int n)
{if(n>9){print(n/10);}printf("%d",n%10);
}
int main()
{unsigned int num=10;scanf("%d",&num);print(num);return 0;
}

总结

以上就是初阶函数的基本内容了!!!!非常感谢你能看到这里!

如果你觉得你有些想法和我一样,想和我一起提升自己可以关注私信我,与我一起进步,一起共同努力!!!!!

【C语言】函数基本知识详细讲解(库函数、自定义函数、参数、函数的套用.....相关推荐

  1. c语言中字符指针变量输入,C语言指针基础知识实例讲解

    对程序进行编译的时候,系统会把变量分配在内存单位中,根据不同的变量类型,分配不同的字节大小.比如int整型变量分配4个字节,char字符型变量分配1个字节等等.被分配在内存的变量,可以通过地址去找到, ...

  2. Discuz二次开发基本知识详细讲解

    Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...

  3. C语言答案解析,C语言题库带详细讲解答案解析.doc

    C语言题库带详细讲解答案解析.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

  4. Php中如何记录本报时间,详细讲解PHP的日期时间函数date()

    详细讲解PHP的日期时间函数date() 作者:wang 日期:2009-06-06 字体大小: 小 中 大 1,年-月-日 echo date('Y-m-j'); 2007-02-6 echo da ...

  5. C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】

    目录 前言 C++函数模板的使用 函数模板语法 1.模板说明 2.函数定义 3.函数模板调用 模板函数 函数模板和函数重载 嵌套使用函数模板 函数模板和普通函数在一起,调用规则 在Linux中反汇编查 ...

  6. java 函数名调用_粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数...

    问题描述: 某个函数fun_1()是在lib内,没法修改的,在程序中大量的使用了该函数,现在想把原本fun_1失效(现在失效的方法是#define fun_1(..)),用另外一个函数fun_2(), ...

  7. 字符、字符串、字符流以及字符串函数的超详细讲解

    前言 本文较为全面地总结了字符串的输入和输出,以及C++String类型常用函数等知识内容,其中包括对字符.字符数组.字符串.字 符串数组.字符串流的定义和输入输出的用法,对C/C++字符串的输入输出 ...

  8. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

  9. c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解

    用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...

最新文章

  1. 白话:服务降级与熔断的区别
  2. websphere7 linux 命令行安装(静默安装)
  3. applicationSettings设置和appsttings
  4. Navicat mysql 加索引_mysql 索引 (Navicat添加索引)
  5. ASP.NET MVC经典项目ProDinner项目解析(3)
  6. 大剑无锋之new一个对象背后发生了什么?
  7. SAP Fiori Launchpad上的错误消息 - User Parameter /UI2/WD_TRKORR_CUST is not maintained
  8. rip协议中周期性广播路由信息的报文_RIP路由理论知识详解(一)
  9. NetCore 统一处理 webapi 返回null 转为“”
  10. 数据库期末总结笔记(零基础)-第三章 关系数据库SQL
  11. spring 默认情况下事务是惟一的 同一个方法里面第一个sql开启后 在执行完 将事务传递给下一个sql...
  12. 校验电话号码 手机号码正则表达式————转载
  13. utorrent设置上传速度_utorrent下载速度很慢怎么设置?
  14. 【docker】如何在docker中执行redis命令
  15. HTML 制作钓鱼网站实现跳转(简篇)
  16. 自定义数据集算子数据结构
  17. 使用 JDBC 进行 MySQL 编程
  18. 路由器上网功能正常但加载不出图片的解决办法
  19. pdf怎么分割页面?
  20. 手把手教你ECSHOP去版权与标志

热门文章

  1. 利用NURBS曲线进行点云曲面拟合算法
  2. Java File类创建目录文件
  3. Linux应用编程(进程)
  4. PB级大规模Elasticsearch集群运维与调优实践
  5. 吞食天地2西瓜魅影 萌新版自通攻略
  6. Excel中VLOOKUP函数的详细用法(灰常有用,求加精!求加精!)
  7. MATLAB调用python文件以及调用.exe文件方法
  8. 网页基础(九)选择器
  9. 拉格朗日对偶函数拉格朗日对偶问题
  10. cglib之Enhancer