C语言函数

函数的定义和调用

函数的概述

函数的作用:
将一段经常使用的代码封装起来,减少重复代码
一个较大的程序,一般分为若干个程序块,每个模块实现特定的功能

函数的定义

函数的定义一般主要分为 5 个部分:

  1. 返回值类型:一个函数可以返回一个值,这里标明返回值的数据类型
  2. 函数名:给函数起一个名称,不能和关键字一样
  3. 参数列表:使用该函数时,传入的数据
  4. 函数体语句:花括号内的代码,函数内需要执行的语句
  5. return 表达式:和返回值类型挂钩,函数执行完后,返回相应的数据
    如:
返回值类型 函数名 (参数列表)
{
    函数体语句
    return 表达式
}

函数的调用

语法:函数名(参数)
注意:调用函数时,传入的实际参数称为实参,而定义函数时,参数列表里称为形参

函数的声明

函数声明的概述

声明的作用:
告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义

声明语法:
返回值类型 函数名 (参数列表);

如:

int max(int a,int b); // 函数的声明
int max(int a,int b)  // 函数的定义
{
   return a > b ? a : b;  // 三元运算
}

函数声明的注意事项

  1. 函数的声明可以多次,但是函数的定义只能有一次
  2. 假如函数在 main 中调用
  • 如果函数的声明写在 main 函数之前,函数的定义可以写到 main 函数之后
  • 那么此函数可以调用成功
  • 如果函数未写声明或者函数的声明写到 main 函数之后,且函数的定义也写在 main 函数之后
  • 那么此函数调用失败

函数的分类

函数的分类方式一

从定义的角度分类:
函数分为库函数自定义函数

库函数:
由 C 系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含该函数原型的头文件即可在程序中直接调用,如 printf、scanf等等

自定义函数:由用户按需要编写的函数

函数的分类方式二

从参数和返回值的角度分类:

  1. 无参无返:void f1(){}
  2. 有参无返:void f2(int a){}
  3. 无参有返:int f3(){ return int类型数据 }
  4. 有参有返:int f4(int a){ return int类型数据 }

函数的值传递

函数的值传递概述

概述:
值传递,就是函数调用时实参将数值传递给形参

特点:
值传递时,如果形参发生改变,并不会影响实参

函数的值传递案例

#include <stdio.h>
#include <stdlib.h>
// 值传递时,形参不可以修改实参
void swap(int a, int b)
{
	printf("交换前:\n");
	printf("a = %d\n", a); //10
	printf("b = %d\n", b); // 20

	int t = a;
	a = b;
	b = t;

	printf("交换后:\n");
	printf("a = %d\n", a); //20
	printf("b = %d\n", b); // 10
}

int main()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	printf("实际是:\n");
	printf("a = %d\n", a); // 10
	printf("b = %d\n", b); // 20

	system("pause");
	return EXIT_SUCCESS;
}

函数的分文件编写

分文件编写步骤

作用:
让代码结构更加清晰,功能模块分离

步骤:

  1. 创建后缀名为 .h 的头文件
  2. 创建后缀名为 .c 的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义,并包含 .h 头文件

分文件编写示例

  • 创建 maxs.h 头文件。写函数的声明
int add(int a,int b); // 加
int sub(int a,int b); // 减
  • 创建 maxs.c 源文件,写函数的定义,并包含头文件
#include "maxs.h"

int add(int a,int b)
{
     return a + b;
}

int sub(int a,int b)
{
     return a - b;
}

使用文件中的函数

使用步骤:

  1. 在 main 函数的文件中,包含自定义的 .h 头文件
  2. 调用自定义文件中的函数即可
    如:
#include “maxs.h”
int main()
{
    int a = 10;
    int b = 10;
    printf( "a + b = %d\n",add(a,b) );
    printf( "a - b = %d\n",sub(a,b) );
}

防止头文件重复包含

头文件重复包含:
如有文件 a1.h,a2.h
在 a1.h 中编写代码 #include "a2.h"
在 a2.h 中编写代码 #include "a1.h"
在 main.c 中编写代码 #include "a1.h"
此时编译器会报错;
c1014 包含文件太大:深度 = 1024

注意:都是写在最上方
解决方式1:
在所有自定义 .h 头文件最上面编写代码:#pragma once

解决方式2:
在 自定义.h 头文件

#ifndef _xxx_
#define _xxx_
         代码语句
#endif
如:
#ifndef __TEST__
#define __TEST__

......函数的声明
#endif // ! __TEST__

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原生爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值