第五章 函数

news/2025/2/21 5:27:03/

函数的概念

函数就是功能。每一个函数用来实现一个特定的功能。函数的名字应反映其代
表的功能。

main函数必须要由,且只能由一个。其他函数可以有多个或者没有。

函数的定义

/*
返回值类型 函数名字(形参列表)
{//函数体
}
*/
int max(int a, int b)
{if(x>y){return x;}else{return y}
}

形参必须带类型,而且以逗号分隔
函数不能嵌套,不能再一个函数体内定义另外一个函数。
函数名不能重复

函数的分类

从定义角度分类(函数是谁实现的)

1、库函数(c库实现的)
2、自定义函数(程序员自己实现的函数)
3、系统调用(操作系统实现的函数)

从参数角度分类

1、有参函数

函数由形参,可以是一个或者多个。

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

2、无参函数

//void可以省略
int func(void)
{
}

从返回值角度分类

带返回值的函数

//必须返回一个char类型的数据
char func()
{char b = 'a';return b;
}
//默认返回整型
func()
{return 1;
}

不带返回值的函数

//void 表示没有返回值,不需要return
void func(int a)
{}

函数的声明

1、概念

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

2、为什么要说明

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

3、声明的方法

什么时候需要声明

1、调用函数和被调用函数在一个.c文件的时候

//被调用函数在上,不需要声明
void func(void)
{printf("hello");
}
void main()
{func();
}
//被调用函数在下,需要声明
void main()
{void func(void);func();
}
void func(void)
{printf("hello");
}

2、调用函数和被调用函数不在一个.c文件的时候

声明方法

1、函数中声明

void main()
{float add(float a, float b);//函数中声明//float add(float, float);//参数名可以省略func();
}
float add(float a, float b)
{return a+b; 
}

2、文件开头进行声明

float add(float a, float b);//在文件开头进行声明
void main()
{func();
}
float add(float a, float b)
{return a+b; 
}

3、其他文件的函数
文件Math.c

#include <stdio.h>float add(float a, float b)
{return a + b;
}

头文件Math.h

extern float add(float a, float b);

main函数所在文件

#include<stdio.h>
#include "Math.h"
//或者不适用头文件,直接文件开头声明外部函数
//extern float add(float a, float b);
int main()
{float a = add(1.1f, 2.2f);return 0;
}

函数的调用

定义:

float add(float a, float b);
void main()
{//调用方传递的叫实参add(1.1f, 2.2f);
}
//形参
float add(float a, float b)
{return a+b; 
}

内部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static,即:
static类型名函数名(形参表);
例如,函数的首行:
static int fun(int a,int b)
表示fun是一个内部函数,不能被其他文件调用。

外部函数

如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。
如函数首部可以为
extern int fun(int a, int b)
这样,函数fun就可以为其他文件调用。
C语言规定,如果在定义函数时省略extern,则默认为外部函数。


http://www.ppmy.cn/news/1132719.html

相关文章

Halcon Image相关算子(二)

(1) dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 功能&#xff1a;从输入图像中选择像素满足阈值条件的那些区域。 图形输入参数&#xff1a;OrigImage&#xff1a;原始图像&#xff1b; 图形输入参数&#xff1a;ThresholdImage&a…

28295-2012 高温合金管材通用技术条件

声明 本文是学习GB-T 28295-2012 高温合金管材通用技术条件. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 1.1 本标准规定了经过热、冷加工生产的变形高温合金管材产品交货的技术要求、试验方法、检验规则 和交货条件等技术内容。 1.2 本标…

1.在vsCode上创建Hello,World

(1).编译器的安装配置 使用vsCode进行编写c语言,首先需要安装gcc编译器,可以自己去寻找资料或者gcc官网进行下载. 下载好后,将文件夹放入到自己指定的目录后,配置系统环境变量,将path指向编译器的bin目录 进入bin目录打开cmd,输入gcc -v,然后就会成功输出信息. (2).vsCode配…

SWOT分析法和个人职业规划

在企业发展的过程中&#xff0c;有一套理论比较靠谱&#xff0c;受到许多大企业的热烈追捧&#xff0c;这套理论倒不是充满神秘感的大道理&#xff0c;而是我们常见的SWOT分析法。S代表了优势&#xff0c;W则是劣势&#xff0c;O乃是英文中的机会&#xff0c;T也就是威胁的意思…

keepalived的vip实现nginx节点的主备

nginx wget http://nginx.org/download/nginx-1.18.0.tar.gz tar zxvf nginx-1.18.0.tar.gzyum install -y gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel libnl3-develcd nginx-1.18.0 mkdir -p /usr/local/nginx #需要使用https&#xff0c;在编译时启用…

链表经典面试题(一)

面试题 1.反转链表的题目2.反转链表的图文分析3.反转链表的代码实现 1.反转链表的题目 2.反转链表的图文分析 我们在实现反转链表的时候,是将后面的元素变前面&#xff0c;前面的元素变后面&#xff0c;那么我们是否可以理解为&#xff0c;用头插法的思想来完成反转链表呢&…

算法练习10——数组为空的最少操作次数

LeetCode 100032 使数组为空的最少操作次数 给你一个下标从 0 开始的正整数数组 nums 。 你可以对数组执行以下两种操作 任意次 &#xff1a; 从数组中选择 两个 值 相等 的元素&#xff0c;并将它们从数组中 删除 。 从数组中选择 三个 值 相等 的元素&#xff0c;并将它们从数…

新手--安装好Quartus II13.0(带modelsim集成包)并用Quartus II搭建一个工程

前言 今天是国庆节&#xff0c;我们正式来学习Quartus II13.0软件的安装与使用。学习verilog与学习C语言都是学习一门语言&#xff0c;那么学习一门语言&#xff0c;光看理论不敲代码绝对是学习不好的。要用verilog语言敲代码&#xff0c;就要像C语言那样搭建起语言的编译环境&…