C语言函数的定义和使用(附带实例)

张开发
2026/4/14 6:45:45 15 分钟阅读

分享文章

C语言函数的定义和使用(附带实例)
函数是指一段可以直接被程序或代码引用的程序或代码也叫作子程序。一个较大的程序一般应分为若干个程序块每一个程序块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念用子程序实现程序块的功能。在 C语言中子程序是由一个主函数和若干个子函数构成的。主函数调用子函数子函数也可以互相调用。同一个函数可以被一个或多个函数调用任意次。在程序设计中一般会将一些常用的程序块编写成函数放在函数库中供公共使用。用户可以利用这些函数以减少重复编写程序块的工作量。C语言函数的定义简单来说函数是执行一个任务的一组语句。每个 C语言程序都至少有一个函数即主函数 main()。函数定义告诉编译器函数的返回类型、名称和参数函数定义提供函数的实际主体。C 语言中函数定义的一般形式如下返回值类型 函数名(参数列表) { 函数主体; }下面介绍一个函数的组成部分 C语言函数的使用在程序中当程序调用函数时程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务当函数的返回语句被执行时或到达函数的结束括号时会把程序控制权交还给主程序。调用函数时主程序传递所需参数如果函数有返回值则可以将返回值传给调用它的主程序。1) 函数参数如果函数要使用参数则必须声明接受参数值的变量这些变量称为函数的形式参数。形式参数就像函数内的其他局部变量在进入函数时被创建退出函数时被销毁。默认情况下C 程序使用传值调用来传递参数只将主程序中的变量值传递过去不改变主程序的变量。2) 形式参数和实际参数形式参数简称形参就是定义函数时的参数表只是定义了调用函数时参数的个数、类型和用来引用的名字并没有具体的内容。形参未被调用时不占存储单元。形参只在调用过程中占用存储单元。实际参数简称实参有确定的值在调用函数的过程中实参将值赋给形参。简而言之在函数定义中函数首部的参数叫形参调用函数时使用的参数叫实参二者之间的区别和联系如下当调用函数时有两种向函数传递参数的方式如下表所示。表参数传递方式调用类型描述传值调用将实参的值赋给函数的形参修改函数内的形参不会影响实参主程序中的变量引用调用通过指针传递方式形参为指向主程序中实参的地址当对形参进行操作时就相当于对实参本身进行操作等同于对主程序中的变量进行操作。【实例 1】交换函数中两个整数的值将两个整数通过第三个临时变量进行交换。#include void swap(int i_a, int i_b) /*函数定义*/ { int temp; temp i_a; /*保存地址 i_a 的值*/ i_a i_b; /*把 i_b 赋值给 i_a*/ i_b temp; /*把 temp 赋值给 i_b*/ return; //该函数无返回值 } int main () { int i_a 100; int i_b 200; printf(交换前i_a, i_b 的值: %d, %d\n, i_a, i_b); swap(i_a, i_b); /*调用函数交换值*/ printf(交换后i_a, i_b 的值: %d, %d\n, i_a, i_b); return 0; //也可以写成return (0)即()可省 }编译运行结果如下交换前i_a, i_b 的值: 100,200交换后i_a, i_b 的值: 100,200程序在调用子函数时会为 i_a、i_b 重新开辟内存空间并将实参的值复制到 i_a、i_b 中去然后在 swap() 函数中i_a、i_b 的值确实发生了交换但这跟主程序中的 i_a、i_b 毫无关系i_a、i_b 并未发生任何改变。子函数调用结束后形参所占内存将自动释放。关于如何在子函数中引用调用函数交换主程序中两个变量的值我在《C语言指针变量作为函数参数》一文中做了详细的讲解。在实例中函数声明和定义都在主程序上方函数声明也可以在主程序中然后在主程序结束之后再进行定义或者在主程序上方声明然后在主程序结束之后再进行定义。其中后两种方式的代码如下#include int main () { int i_a 100; int i_b 200; void swap(int i_a, int i_b); //只声明不定义 printf(交换前i_a, i_b 的值: %d, %d\n, i_a, i_b); swap(i_a, i_b); /* 调用函数交换值*/ printf(交换后i_a, i_b 的值: %d,%d\n, i_a, i_b); return 0; } void swap(int i_a, int i_b) /*函数定义*/ { int temp; temp i_a; /*保存地址 i_a 的值*/ i_a i_b; /*把 i_b 赋值给 i_a*/ i_b temp; /*把 temp 赋值给 i_b*/ return; //该函数无返回值 }或者如下#include void swap(int i_a , int i_b); //只声明不定义 int main () { int i_a 100; int i_b 200; printf(交换前i_a, i_b 的值: %d, %d\n, i_a, i_b); swap(i_a, i_b); /*调用函数交换值*/ printf(交换后i_a, i_b 的值: %d, %d\n, i_a, i_b); return 0; } void swap(int i_a, int i_b) /*函数定义*/ { int temp; temp i_a; /*保存地址 i_a 的值*/ i_a i_b; /*把 i_b 赋值给 i_a*/ i_b temp; /*把 temp 赋值给 i_b*/ return; //该函数无返回值 }【实例 2】输入 3 个整数并将最大值输出。这个程序先输入 3 个整数 i_x、i_y 和 i_z把 i_x 和 i_y 作为参数传递给函数 GetMax()获取其中的最大值赋给 i_temp作为函数返回值然后返回给主程序的 i_max 变量再一次调用函数 GetMax()将 i_z 和 i_max 作为参数传递给函数 GetMax()将其中的最大值赋给 i_ temp作为函数返回值然后返回给主程序的 i_max 变量最后将 i_max 输出。#include int GetMax(int i_x, int i_y) //获取二者中的最大值 { int i_temp; (ab)?(i_ temp i_x):(i_ temp i_y); //三目运算,将最大值赋给i_temp return i_ temp; } int main(){ int i_x, i_y, i_z, i_max; printf(请输入三个数字空格分隔:); scanf(%d%d%d, i_x, i_y, i_z); i_maxGetMax(i_x, i_y); //调用函数 i_maxGetMax(i_z, i_max); //再次调用函数 printf(最大数为: %d \n, i_max); return 0; }编译运行结果如下请输入三个数字空格分隔: 1 22 11最大数为: 22

更多文章