C语言函数是什么?新手必懂的核心概念

张开发
2026/4/20 21:19:35 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 个整数并将最大值输出。这个程序先输入三个整数分别是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

更多文章