爱上C语言:什么C语言函数不太会,那你千万不要错过这篇(函数篇)

简介: 爱上C语言:什么C语言函数不太会,那你千万不要错过这篇(函数篇)

🚀前言

大家好啊😉!今天阿辉将为大家介绍C语言中的函数,✍包括函数的分类、参数、调用、函数嵌套调用和链式访问以及函数的定义和声明,内容干货满满😋,接下来就跟着阿辉一起学习吧👊

🚀什么是函数?

函数那不是数学里的东西吗?

不不不,今天阿辉要分享的是C语言中的函数。

在C语言中函数又称为子程序,是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性

一般函数有参数、返回值和函数名。

🚀函数的分类

  • 库函数
  • 自定义函数

✈️库函数

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

例如:

在屏幕上按一定格式打印信息的库函数(printf)
计算字符串长度的库函数(strlen)
用来生成随机数的库函数(rand)

这些库函数能提高我们程序的可移植性和我们编写程序的效率,库函数有很多难道都得背下来吗?这不现实,我们可以通过C plus plus这个网站学习库函数

比如在这个网站中我们看一看strilen这个库函数

这个网站对于我这种菜鸟是不够友好的,它全部都是英文,但是咱们也不要因噎废食
我们可以使用网页翻译,但阿辉觉得学习英语是非常用必要的
阿辉英语也很菜,一起加油吧!

用库函数记得引对应的头文件

✈️自定义函数

上面我们介绍了库函数,自定义函数才是重头戏,因为有许多的功能都需要我们程序员自己来设计,仅仅靠库函数是不够的。

同样的自定义函数与库函数一样都有返回类型,函数名和参数
type fun_name(para)
{
  statement;//语句
}
type返回类型
fun_name函数名
para参数

当函数不需要返回值时返回类型要用void,不需要参数时括号内要用(void)

如果省略这些的话可能会出bug

举例:找两个数中较大的一个

#include<stdio.h>
int num_max(int a, int b)
{
  return (a > b) ? a : b;
}
int main()
{
  int a = 20;
  int b = 10;
  int max = num_max(a, b);
  printf("%d\n", max);
  return 0;
}

自定义函数时函数的名字要起的有意义,别人在读你的代码时就会更加舒服

✈️ 三目操作符

上述代码中函数部分用到了三目操作符(也叫做条件操作符),那我们就简单介绍一下吧

三目操作符的语法规则

conditon?exp 1:exp 2;

其中,contion是条件表达式,当条件表达式为真(非0值)时执行表达式exp 1,为假(值为0)时执行表达式exp 2

🚀函数的参数

函数的参数有实际参数形式参数

例:

#include<stdio.h>
int num_max(int a, int b)
{
  return (a > b) ? a : b;
}
int main()
{
  int a = 20;
  int b = 10;
  int max = num_max(a, b);
  printf("%d\n", max);
  return 0;
}

✈️实际参数(实参)

实参:真实传给函数的参数就是实参,实参可以是常量变量表达式函数,无论实参是何种类型在函数调用时他们都必须由确定的值,以便把值传给形参

例如:上述代码中int max = num_max(a, b)中的ab都是实参

✈️形式参数(形参)

形参:函数用来接收实参的参数就是形参,也就是函数名后面括号里的变量,形参只有在函数调用时才被创建(实例化分配内存空间),出了函数就被销毁,函数调用结束形参的生命周期也结束了。

形参只在函数中起作用,形参只是实参的一份临时拷贝

例如:上述代码中int num_max (int a, int b)中的ab就是形参

🚀函数的调用

函数的调用分为:传值调用和传址调用

他们有什么区别呢?我们接着来看👇

✈️传值调用

传值调用:形参和实参分别占有不同的内存块,改变形参并不会影响实参

简单来说就相当于在函数内新创建了一个变量,只不过这变量的初始化内容就是传过来实参的值。

✈️传址调用

传址调用:是将函数外创建的变量的内存地址传给函数的一种函数调用方式。

这种调用方式真正的将函数与外部变量联系起来,也就是函数内部可以操作函数外部的变量。

综上:传值调用不能改变实参,传址调用可以改变实参

例:交换两个数

void exchange(int a, int b)
{
  int tmp = a;
  a = b;
  b = tmp;
}
int main()
{
  int a = 10;
  int b = 20;
  printf("交换前:a = %d b = %d\n", a, b);
  exchange(a, b);
  printf("交换后:a = %d b = %d\n", a, b);
  return 0;
}

我们可以看到,由于是传值调用形参不能改变实参,所以两个数并没有被交换
因此,这里得使用传址调用

正确代码👇

void exchange(int* a, int* b)
{
  int tmp = *a;
  *a = *b;
  *b = tmp;
}
int main()
{
  int a = 10;
  int b = 20;
  printf("交换前:a = %d b = %d\n", a, b);
  exchange(&a, &b);
  printf("交换后:a = %d b = %d\n", a, b);
  return 0;
}

🚀函数的嵌套调用

函数的嵌套调:就是在函数的内部调用其他函数

例如:

虽然函数可以嵌套调用,但并不能嵌套定义

🚀函数的链式访问

函数的链式访问:就是把一个函数的返回值作为一个函数的参数

我们来看一个有意思的例子👊

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

大家不妨看看这个代码的运行结果是什么,没错屏幕上打印了4321,怎么样你答对了吗?

库函数printf的返回值是成功打印字符的个数,如果打印出错则返回负数

分析:程序从最里层的函数开始,首先,最里面的printf打印了43,返回值为2,然后第二个printf打印了2,返回值为1,然后最后一个printf打印了1,所以最总屏幕上打印了4321

🚀函数的定义和声明

函数的定义:就是函数的具体实现

函数的声明:就是让编译器有这么个函数,函数名是什么,函数的返回值和参数又是什么

使用函数前要满足先声明后使用

函数的声明有以下两种方式:

函数原型式声明:

int fun(int a, int b); // 函数名字fun,返回类型 int,有2个int 参数

函数简单声明:

int fun(int, int); // 函数名字fun,返回值类型int,有2个int 参数

到这里,阿辉今天对于C语言函数的分享就结束了,希望这篇博客能让大家有所收获, 如果觉得阿辉写得不错的话,记得给个赞呗,你们的支持是我创作的最大动力🌹

相关文章
|
6天前
|
C语言
C语言:内存函数(memcpy memmove memset memcmp使用)
C语言:内存函数(memcpy memmove memset memcmp使用)
|
5天前
|
C语言
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
C语言—内存函数的实现和模拟实现(内存函数的丝绸之路)
18 0
|
5天前
|
C语言
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
C语言—字符函数与字符串函数(字符问题变简单的关键之技)
6 0
|
1天前
|
C语言 C++
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
5 0
|
5天前
|
C语言
C语言——函数递归
C语言——函数递归
7 0
|
5天前
|
C语言
C语言—函数(大化小方式的心脏)
C语言—函数(大化小方式的心脏)
4 0
|
6天前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
16 2
|
6天前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
6天前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
6天前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)