C语言学习笔记 - 函数
本笔记为看B站郝斌老师C语言教程所作
因为之前已经看过一部分,笔记写在了本子上,故本笔记前面不做重复记录
一、为什么需要函数
举例:比较两个数的最大值
# include<stdio.h>
void max(int i, int j) //max是函数的名字,i和j是形式参数,简称形参,void表示没有返回值。
{
if(i > j)
printf("%d\n", i);
else
printf("%d\n", j);
}
int main(void)
{
int a, b, c, d, e, f;
a = 1, b = 2, c = 3, d = 9, e = -5, f = 100;
max(a, b);
max(c,d);
max(e, f);
}
为什么需要函数?
答:避免了重复性操作,有利于程序的模块化,
二、什么叫函数
逻辑上:能够完成特定功能的独立的代码块
物理上:能够接收数据,能够对接收的数据进行处理,能够将数据处理的结果返回(也可以不返回任何值)
总结:函数是个工具,它是为了解决大量类似的问题而设计的,函数可以当作一个黑匣子
# include<stdio.h>
int f(void) //括号中的void表示该函数不能接收数据,int表示该函数返回值是int类型的
{
return 10; //正确,该子函数可以有返回值
}
void g(viod) //viod在前表示该子函数没有返回值,后面不能加return
{
return 10; //错误,与该子函数行首的viod相矛盾
}
int main(void)
{
int j;
j = f(); //调用f()函数并赋值给j
printf("%d\n",j);
return 0;
}
int f(void) //括号中的void表示该函数不能接收数据,int表示该函数返回值是int类型的
void g(viod) //viod在前表示该子函数没有返回值,后面不能加return
三、如何定义函数
函数的返回值 函数的名字(函数的形参列表)
{
函数的执行体
}
-
函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法
-
return 表达式;(例如:return 10;) 的含义:
- 终止被调函数,向主调函数返回表达式的值;
- 如果表达式为空,则只终止函数,不向主调函数返回任何值
- break是用来终止循环和switch的,而return是用来终止函数的
例如:
void f()
{
return; //return只用来终止函数,不向主调函数返回任何值
}
int f()
{
return 10; //终止函数且向主调函数返回10
}
- return和break的区别
viod f(viod)
{
int i;
for(i=0; i<5;++i)
{
printf("大家辛苦了!\n");
break;
}
printf("同志们好!\n");
}
上面代码打印一遍“大家辛苦了”一遍“同志们好”,因为函数里面的break使进程跳出了for循环。
void max(int i, int j)
{
int i;
for(i=0; i<5;++i)
{
printf("大家辛苦了!\n");
return;
}
printf("同志们好!\n");
}
上面代码只打印一遍“大家辛苦了,因为函数里面的return终止了整个子函数。
- 函数返回值的类型也成为函数的类型,因为如果_函数名前的返回值类型_和_函数函数执行体中return表达式中表达式的类型_不同的话,则最终函数返回值的类型以_函数名前的返回值类型_为准。
例如:
int f(void) //括号中的void表示该函数不能接收数据,int表示该函数返回值是int类型的
{
return 10.5; //因为函数的返回值类型是int,所以最终f返回的是10而不是10.5
}
四、函数的分类
主要分为
- 有参函数{void max(int i, int j) }和无参函数{void max(int i, int j) }
- 有返回值和无返回值
- 库函数和用户自定义函数
- 普通函数和子函数(一个程序必须有且只能有一个主函数)(主函数可以调用普通函数,普通函数不能调用主函数)(普通函数之间可以相互调用)(主函数是程序的入口,也是程序的出口)
五、函数的声明
函数在使用之前要先声明
因为函数执行是从主函数开始执行的,如果子函数在主函数后面且主函数调用了子函数,则会报错,此时需要在主函数之前声明一下,我后面写了这个子函数,调用的时候去后面查找就行。
注意的问题
函数调用和函数定义的顺序
如果函数调用写在了函数定义的前面,则必须加函数前置声明
函数前置声明:
1.告诉编译器即将可能出现的若干个字母代表的是一个函数。
2.告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况。
3.函数声明是一个语句,末尾必须加分号。
4.对库函数的声明是通过#include<库函数所在的文件名字.h>来实现的。
# include <stdio.h>
void f(void); //函数在使用之前需要先声明
int main(void)
{
f();
return o;
}
viod f(void)
{
printf("哈哈\n");
}
形参和实参
# include <stdio.h>
void f(void); //函数在使用之前需要先声明
int main(void)
{
f(5); //5为实参
return o;
}
viod f(int i) //i为形参
{
printf("哈哈\n");
}
六、常用的系统函数
- doule sqrt(double x); 求x的平方根
- int abs(int x); 求x的绝对值(整数)
- double fabs(double x); 求x的绝对值(非整数)
推荐书籍《turboc 2.0实用大全》主要讲解C语言常用系统函数
七、变量的作用域和存储方式
- 变量按作用域分
- 全局变量:
- 在所有函数外部定义的变量全局变量
- 使用范围:从
定义位置开始到整个程序结束
- 局部变量:
- 在一个函数内部定义的变量或者函数的形参都统称局部变量
- 使用范围:只能在本函数内部使用
- 注意的问题:
- 全局变量和局部变量命名冲突的问题:在一个函数内部如果定义的局部变量的名字和全局变量名一样时,局部变量会屏蔽掉全局变量
- 全局变量:
# include<stdio.h>
int k = 1000; //全局变量,要放在所有函数之前
viod f(int i)
{
int j = 20; // 局部变量
}
int main(void)
{
int i = 10; //局部变量
return 0;
}
- 变量按存储方式分
- 静态变量
- 自动变量
- 寄存器变量
本文深入探讨C语言中函数的重要性及其实现方式,包括函数的定义、分类、声明、调用等核心概念,并介绍变量的作用域及存储方式。此外,还列举了一些常用的系统函数。

3431

被折叠的 条评论
为什么被折叠?



