广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言深入了解函数
  • 860
分享到

C语言深入了解函数

2024-04-02 19:04:59 860人浏览 泡泡鱼
摘要

目录1. 函数的概念2. 函数的分类从定义角度分从参数角度分类从返回值角度分3. 函数的定义4. 函数的声明5. 函数的调用6. 递归函数1. 函数的概念 函数是C语言的功能单位,实

1. 函数的概念

函数是C语言的功能单位,实现一个功能可以封装一个函数来实现。

定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。 函数就是将特定功能的代码封装在一个函数内部,当使用这些代码时,只需要调用函数即可。

2. 函数的分类

从定义角度分

  • 库函数(即函数是谁实现的)
  • 自定义函数
  • 系统调用(操作系统实现的函数)

从参数角度分类

有参函数:函数有一个或多个形参(参数类型随便)

int fun(int a ,float b,double c){ }

无参函数:函数没有参数,在形参列表的位置写void或什么都不写

int fun(void) { }或 int fun( ){ }

从返回值角度分

带返回值的函数:在定义函数的时候,必须带着返回值类型,在函数体里,必须有return,如果没有返回值类型,默认返回整型。

无返回值函数:函数名前加void,return可以写也可以不写,写的时候后面加一个分号即return;

3. 函数的定义

定义方法:

格式如下

返回值类型 函数名字(形参列表,用逗号分隔开) {

//函数体,函数的功能在函数体里实现

}

int max(int a,int b)
{
 int z;
 if (x>y){
	z = x;
	}
 else{
	z = y;
	}
 return z;
}

注意:函数名字是标识符,所以要满足标识符的命名规则

return 后面跟的变量类型必须与函数名左边的类型一致

在一个程序中,相同的函数名只能出现依次

#include<stdio.h>
// 定义一个没有参数也没有返回值的函数
void myfunc1(){
    printf("哇哦哇哦\n");
    return ;
}
//定义一个无返回值,有参数的函数
void myfunc2(int a,int b){
    int sum;
    sum = a + b;    
    printf("%d + %d = %d\n",a,b,sum);
}
//定义一个有返回值,有参数的函数
int myfunc3(int a,int b){
    int sum;
    sum = a + b;
    return sum;
}
int main(){
    // 调用函数myfunc1
    // 调用的时候不用加返回值类型
    myfunc1();
    return 0;
}

4. 函数的声明

概念:对已经定义的函数,进行说明,函数可以多次声明

为什么要进行声明? 有些情况下,如果不对函数进行声明,编译器在编译的时候,可能不认识这个函数,因为编译器在编译c程序的时候,是从上往下编译的。

  • 主调函数和被调函数在同一个.c文件中的时候:

(1)被调函数在上,主调函数在下,不需要声明,即下面的函数可以调用上面的函数

(2)被调函数在下,主调函数在上,需要声明。

对于一些高级的编译器,不用声明也能调用函数,但是会弹出很多warning。

声明的方式

1.直接声明法:将被调用的函数的定义拷贝过去,后面加分号,如下例:

#include<stdio.h>
void myfunc1();  // 直接声明
int main(){
    myfunc1();
    return 0;
}
void myfunc1(){
    printf("哇哦哇哦\n");
    return ;
}

2.间接声明:将函数的声明放在头文件中, .c程序包含头文件即可(例子待补充…)

  • 主调函数和被调函数在不同一个.c文件中的时候:

一定要声明!!!

声明的方式

1.直接声明:将被调用的函数的定义拷贝过去,后面加分号,前面加 extern

2.间接声明:将函数的声明放在头文件中, .c程序包含头文件即可

5. 函数的调用

变量=函数名(实参列表); // 带返回值的

函数名(实参列表); // 不带返回值的

推荐阅读:《形参和实参的区别》

#include<stdio.h>
int sum(int a,int b){    // 定义带返回值的函数,定义的时候是形参
    int sum = a + b;
    return sum;
}
void func(){
    printf("我是无返回值函数!\n");
    printf("我是老六~\n");
    return; 
}
int main(){
    int re = sum(1,2);    // 调用带返回值的函数,调用的时候是实参,定义一个int类型的变量re来接收sum函数返回的结果
    printf("结果是:%d\n",re);
    func();   // 调用无返回值函数
    return 0;
}

6. 递归函数

自己调用自己的函数叫做递归函数

递归函数调用会在计算机里同时存在多个,其中最后一个是当前正在工作的那个。

一个非常复杂的问题,如果可以拆分成多个小问题,其中至少有一个小问题和原来的问题本质上一样,只是规模小一些,就可以采用递归来解决。

编写原则

首先要在递归函数中编写语句描述问题的拆分方式

在递归函数的开始编写分支解决不再拆分的情况(这种情况必须保证程序可以结束)

参考《C语言中的递归》

到此这篇关于C语言深入了解函数的文章就介绍到这了,更多相关C语言函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言深入了解函数

本文链接: https://www.lsjlt.com/news/148327.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言深入了解函数
    目录1. 函数的概念2. 函数的分类从定义角度分从参数角度分类从返回值角度分3. 函数的定义4. 函数的声明5. 函数的调用6. 递归函数1. 函数的概念 函数是c语言的功能单位,实...
    99+
    2022-11-13
  • 深入了解C语言字符函数和字符串函数
    目录前言求字符串长度strlen介绍strlen直接使用:strlen模拟实现:strlen对比sizeof长度不受限制的字符串函数strcpy直接使用模拟实现:strcat直接使用...
    99+
    2022-11-12
  • 深入了解C语言指针
    目录指针是什么?指针和指针类型指针运算总结指针是什么? 总结:指针就是个变量,变量里面是地址,指针就是地址。(存放在指针的值都被当成地址处理)。 注:指针的大小在32位平台是4个字节...
    99+
    2022-11-12
  • c语言深入理解函数的递归
    前言:  首先,递归是什么,递归就是在定义函数时,然后在函数里调用这个函数,通俗讲,就是函数自己调用自己。那么递归的好处是什么呢?它能够将复杂的问题,用少量的代码来表示,增加了代码的...
    99+
    2022-11-13
  • C语言深入讲解函数的使用
    目录关于函数1. 函数的定义形式2. 函数的声明3. 返回语句4. 函数参数4.1 形式参数(传值调用)4.2 实际参数(传址调用)4.3 无参数5. 函数的调用5.1 嵌套调用5....
    99+
    2022-11-13
  • 深入了解C语言中的字符串和内存函数
    目录1. 前言2. 求字符串长度2.1 strlen3. 长度不受限制的字符串函数3.1 strcpy3.2 strcat3.3 strcmp4. 长度受限制的字符串函数4.1 st...
    99+
    2022-11-13
    C语言 字符串 内存函数 C语言 字符串 C语言 内存函数
  • 深入了解c语言的循环语句
    目录C语言循环语句while循环for循环do......while循环的嵌套总结:C语言循环语句 大多数人都希望自己是体格强健,天资聪慧,多才多艺的人。虽然有时事与愿违,但至少我们...
    99+
    2022-11-12
  • C语言深入讲解函数参数的使用
    目录一、函数参数二、程序的顺序点三、小结-上四、调用约定五、可变参数六、可变参数的限制七、小结-下一、函数参数 函数参数在本质上与局部变量相同在栈上分配空间函数参数的初始值是函数调用...
    99+
    2022-11-13
  • 深入了解C语言栈的创建
    目录栈的结构定义如下:栈的初始化如下:栈元素的输入接口:完整代码如下:运行结果如下:总结栈:是限定仅在表尾进行插入和删除操作的线性表! 栈的结构定义如下: typedef str...
    99+
    2022-11-12
  • 深入了解C语言冒泡排序优解
    目录1:直接冒泡2:函数冒泡3:冒泡优化总结:1:直接冒泡 #include<stdio.h> int main() { int i,j; int ...
    99+
    2022-11-12
  • 怎么深入了解c语言的循环语句
    怎么深入了解c语言的循环语句,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。C语言循环语句大多数人都希望自己是体格强健,天资聪慧,多才多艺的人。虽然有时事与愿违,但至少我们用...
    99+
    2023-06-22
  • 深入了解一下C语言中的柔性数组
    目录什么是柔性数组柔性数组的使用什么是柔性数组 柔性数组是在C99中定义的 结构体的最后一个元素允许是未知大小的数组,这就叫柔性数组 柔性数组的长度可以写成0,也可以不规定数组长度 ...
    99+
    2023-02-13
    C语言柔性数组使用 C语言柔性数组
  • C语言深入探究函数的溯源
    目录一、函数的由来二、模块化程序设计三、C 语言中的模块化四、面向过程的程序设计五、声名和定义六、小结一、函数的由来 二、模块化程序设计 三、C 语言中的模块化 四、面向过程的...
    99+
    2022-11-13
  • R语言Legend函数深入详解
    legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black", lty, lwd, pc...
    99+
    2022-11-11
  • R语言boxplot函数深入讲解
    箱线图简介 箱线图又称箱形图或盒须图,该图是由5个特征值绘制而成的图形。 5个特征值是变量的最大值、最小值、中位数、第1四分位数和第3四分位数。 连接两个分位数画出一个箱子,箱子用中...
    99+
    2022-11-11
  • 深入了解Go语言的基本语法与常用函数
    目录一、基本语法标识符命名规范变量的定义与使用定义常量二、常用函数main 函数与 init 函数fmt 包及其函数一、基本语法 标识符命名规范 Go 是区分大小写的,标识符的命名包...
    99+
    2022-11-13
  • 深入了解C语言中的const和指针
    目录前言指针的赋值问题ANSI C 有关简单赋值的标准问题解决const修饰const修饰变量const修饰指针前言 文章内容由阅读《C专家编程》整理而来。希望可以帮助大家解决在指针...
    99+
    2022-11-13
  • C语言深入浅出分析函数指针
    我们先看一个代码: #include<stdio.h> void test() { printf("haha\n"); } int main() { printf("...
    99+
    2022-11-13
  • C语言深入详解四大内存函数的使用
    目录1.memcpy2.memmove3.memcmp4.memset1.memcpy 与字符串函数 strcpy 类似,也是进行拷贝。但是需要注意的是,strcpy 是针对字符串进...
    99+
    2022-11-13
  • C语言由浅入深了解变量的应用
    目录1. 变量的存储类别内存虚拟内存分区(运行程序时进行分区) 2. 全局变量普通的全局变量静态全局变量3. 局部变量普通局部变量静态局部变量4. const不可赋值变量5...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作