C语言 - 函数:函数定义
函数
1 - C 程序是由函数构成的,每个函数负责完成一部分的功能,函数将功能封装起来,以供程序调用。函数是具有某种特定功能的代码块
2 - 函数的分类
① 从函数定义角度分为库函数(printf、scanf、puts、gets、putchar、getchar、strcat 等)和用户定义函数
② 从有无返回值、主调函数和被调函数之间的数据传递角度又分为:无返回值无参函数;无返回值有参函数;有返回值无参函数;有返回值有参函数
函数定义
1 - 函数通常包括三部分:函数名、函数体、调用;类型标识符和函数名称为函数头;( ) 中的内容称为形参,不管 ( ) 中有没有值,都不能将其省略
2 - 函数的定义和声明不是一个概念,定义是对整个函数功能的确立,包括函数名、函数类型、函数体、形参等
3 - 代码示例
① 函数定义
1 #include <stdio.h> 2 // 定义:方式一 3 int sumValue(int a,int b){ 4 5 int sum = 0 ; 6 sum = a + b; 7 return sum; 8 } 9 // 定义:方式二 10 // 可在 main 函数头上声明函数并在 main 函数底下进行实现 11 int plusValue(int a,int b);// 若把该函数的声明屏蔽掉,在 main 函数中调用会产生警告 12 13 int main(int argc, const char * argv[]) { 14 15 // 调用 16 int sum =sumValue(10, 20); 17 printf("sum = %d\n",sum ); 18 19 int plus =plusValue(200, 300); 20 printf("plus = %d\n",plus ); 21 22 return 0; 23 } 24 25 // 实现函数 26 int plusValue(int a,int b){ 27 28 int plus = 0 ; 29 plus = a + b; 30 return plus; 31 }
② 如何使用函数
// - funcs.h
1 #include <stdio.h> 2 3 void hello ();// 无参无返回值 4 5 float PI(); // 无参有返回值 6 7 int max (int a,int b); // 有参有返回值 8 9 void printNumber(int number);// 有参无返回值 10 11 int sumOfOneToNumber(int number); 12 13 int sumOfOneNumberToAnotherNumber(int min,int max); 14 15 int subValue(int c,int d);
// - funcs.c
1 #include "funcs.h" 2 void hello (){ 3 4 printf("hello world\n"); 5 } 6 7 float PI(){ 8 return 3.1415926; 9 } 10 11 int max (int a,int b){ 12 13 return a>b ?a:b; 14 } 15 16 17 void printNumber(int number){ 18 printf(" %d",number); 19 } 20 21 int subValue(int c,int d){ 22 23 int sub = 0; 24 sub = c-d; 25 return sub; 26 } 27 28 // 计算 1 到 100 的和 29 int sumOfOneToNumber(int number){ 30 31 int sum =0; 32 for(int i =0;i< number+1;i++){ 33 sum +=i; 34 } 35 return sum; 36 } 37 38 39 40 // 从一个数到另一个数的和 41 int sumOfOneNumberToAnotherNumber(int min,int max){ 42 43 int sum =0; 44 for(int i = min ;i<max+1;i++){ 45 sum +=i; 46 } 47 return sum; 48 }
// - main.m
1 #include <stdio.h> 2 #import "funcs.h"// 引入头文件 3 int main(int argc, const char * argv[]) { 4 5 // 输出指定语句 6 hello(); 7 8 // π 的值 9 double r =10; 10 double s= PI()*r*r; 11 printf("%f\n",s); 12 13 // 比大小 14 printf("%d\n",max(100, 20)); 15 16 // 差 17 int t =subValue(30, 10); 18 printf("%d\n",t); 19 20 // 输出参数 21 printNumber(10); 22 23 // 计算从 1 到 100 的和 24 int a =sumOfOneToNumber(100); 25 printf("%d\n",a); 26 27 // 计算一个数到另一个数的和 28 int b = sumOfOneNumberToAnotherNumber(20, 30); 29 printf("%d\n",b); 30 31 return 0; 32 }
注:形参变量只有在被调用时才分配内存单元,在函数调用完毕时会立刻被释放掉
return 关键字
1 - return 的作用
① 退出函数,return 后面的语句不再执行
② 返回一个具体的值给调用者
注:如果没有写清楚返回值的类型,则默认为 int 型。就算明确声明了返回值类型,也可以返回空值;一个函数只能有一个返回值
多人协作
1 - 函数的实现放在 .c 文件中,函数的声明放在 .h 文件中。其中 .h 文件生下来就是打酱油被别人拿来拷贝包含的,编译链接时不用写出
2 - main 函数的返回值是返回给操作系统的,0 为正常退出,其他值为非正常退出(返回值对程序本身没有影响,仅作标记)
3 - printf 函数是由返回值的,它返回的是字符数
printf("%d \n",printf("abc\n")); printf("%d \n",printf("abc男\n"));
日志信息
小结
1 - 函数之间是平等的,不能嵌套定义函数,但是可以嵌套调用
2 - 函数不可以重复定义,但是可以重复声明(覆盖)
3 - 函数如果是只要声明没有实现,那么编译可以成功,但链接时会失效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)