C语言第七课----------函数的定义及使用--------C语言重要一笔

作者前言

个人主页::小小页面

gitee页面:秦大大

一个爱分享的小博主 欢迎小可爱们前来借鉴


目录

1.函数是什么

  1. 库函数

  2. 自定义函数

  3. 函数参数

  4. 函数调用

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

  6. 函数的声明和定义

  7. 函数递归


插播小知识

  1. c99标准中,加入了变长数组的概念,数组的大小允许使用变量来指定,但是数组的大小一旦确定后,是不能再变化,变长数组不能初始化,VS环境不支持变长数组

2.define、#include 等不是关键字,是预处理指令

3.指针是地址,但是我们平时说p是指针,p是指针变量,所以我们的口头语的指针指的是指针变量

  1. 求平均值的方法

方法1: (a+b)/2 (不建议写这个)

方法二:

只需把多出的部分进行平分,就行了

a+(b-a)/2

函数是什么?

就拿数学来讲,数学函数类似于f(x)=ax+b的形式,而C语言的函数就是类似于这样的,只不过

C语言的不仅仅有ax+b还有很多的内容在一起,共同组建成一个f(x),一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。

C语言中函数的分类:

  1. 库函数

  2. 自定义函数

库函数

简单的说库函数就是C语言编译器厂商提供的函数,使用这些库函数的前提是要调用头文件

,C语言只是起到一个规定这个函数怎能使用和创建,如下:

C语言标准规定:

1.函数的功能----比如计算字符长度

2.函数名-------strlen

3.参数--------strlen(const char* str)

4.返回类型--------isize_t

简单的总结,C语言常用的库函数都有:

IO 函数
字符串操作函数
字符操作函数
内存操作函数
时间 / 日期函数
数学函数
其他库函数

有兴趣的小可爱可以来这里看看https://cplusplus.com/reference/cctype/
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com (英文版)
http://zh.cppreference.com (中文版)
有兴趣的小可爱可以看看

自定义函数

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

复制代码
ret_type fun_name(para1, * )
{
 statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数

上面是函数的基本组成,简单就是 函数名 参数 函数体 返回类型

比如创建一个求两数最大值的函数定义

cpp 复制代码
#include<stdio.h>
//int compare(int a, int b)
//{
//	return (a > b ? a : b);
//}
int* compare(int* a, int* b)
{
	return (*a > *b ? a : b);
}
int main()
{
	int a = 1;
	int b = 6;
	compare(&a, &b);
	printf("%d", *compare(&a, &b));
	return 0;
}

当我们运行出来可以看出,使用第一种定义函数,没有改变nunm1和num2的值,这是因为将实参传递给形参,形参其实是实参的一种临时拷贝,对形参的修改,不会改变实参

第二种方法是通过操作地址来实现的,

**.**函数的参数

实际参数(实参)

简单的说就是传入值后的参数,如上图的&num1就是实参,(有真正的值),可以理解为调用函数后的参数变成了实参

实参可以是:常量、变量、表达式、函数等。

形式参数(形参)

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化,

函数的调用:

传值调用
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
传址调用(地址也是值,传的是地址,不是指针变量)
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操
作函数外部的变量。
练习
写一个函数可以判断一个数是不是素数

cpp 复制代码
#include<stdio.h>
#include<math.h>
int is_prime(int i)
{
	int j = 0;
	for (j = 2; j <= sqrt(i); j++)
	{
		if (i % j == 0)
		{
			return 0;
		}
	}
	return 1;
}
int main()
{
	int i = 0;
	for (i = 101; i <= 200; i += 2)
	{
		int a = is_prime(i);
		if (a)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

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

嵌套调用

简单的说就是函数里面有函数调用,注意一下,函数定义不能在函数内部定义

链式访问
一个函数的返回值作为另一个函数的参数

总结:

C语言的函数先介绍到这里,后面还会有后续

相关推荐
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说2 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔2 天前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔2 天前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing102329292 天前
Day03_刷题niuke20250915
c语言
我是菜鸟0713号2 天前
Qt 中 OPC UA 通讯实战
开发语言·qt
JCBP_2 天前
QT(4)
开发语言·汇编·c++·qt·算法