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语言的函数先介绍到这里,后面还会有后续

相关推荐
落落落sss8 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
简单.is.good25 分钟前
【测试】接口测试与接口自动化
开发语言·python
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节
我是陈泽1 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
优雅的小武先生1 小时前
QT中的按钮控件和comboBox控件和spinBox控件无法点击的bug
开发语言·qt·bug
虽千万人 吾往矣1 小时前
golang gorm
开发语言·数据库·后端·tcp/ip·golang
创作小达人1 小时前
家政服务|基于springBoot的家政服务平台设计与实现(附项目源码+论文+数据库)
开发语言·python
郭二哈1 小时前
C++——list
开发语言·c++·list
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源