c# 函数
C语言函数可分为库函数和自定义函数。库函数包括字符分类(如islower())和转换函数(需包含ctype.h),用于字符判断和处理。自定义函数按返回值、参数分为多种形式,需先定义后调用。函数间通过实参形参传递数据,有值传递和地址传递两种方式。变量按作用域分局部/全局变量,按存储类型分自动/静态/寄存器变量。函数调用方式包括嵌套和递归调用,变量传递可使用简单变量或数组作为参数。程序由多个函数组成,

函数的分类
定义来看
库函数
就是c语言程序文件自带的函数,使用是要引入该函数所在的文件(井号那个头文件)
分类
字符分类函数和字符转换函数
头文件:ctype.h
1、字符分类函数
就是这个函数通过返回值判断这个字符是否为一个特定的类型
以下是常见字符分类函数

关于一些问题:
什么是?
控制字符:相当于指令字符,可以让电脑办事情(比如回车,换行,响铃),大多数情况下无法显示出来
图形字符:电脑可以显示的字符,不如说标点符号,字母,数字这些
可打印字符:就是图形字符,所有能被电脑显示的字符
例:
输入一串字符串,把其中所有小写字母都转换成大写字母
#include<stdio.h>
#include<ctype.h>
int main()
{
char arr[]="Hello World";
int i=0;
while(arr[i]!='\0')
{
if(islower(arr[i]))
arr[i]-=32;
printf("%c",arr[i])
i++;
}
return 0;
}
2、字符转换函数
就是这个函数把一个类型的字符转换成另一个类型,在c语言里面就基本是这两个(大小写字母转换)
tolower(大写转小写)
toupper(小写转大写)
emm依旧是在括号里面直接写
if(islower(arr[i]))
{
arr[i]=toupper(arr[i]);
}
目录路径
emm反正是有这么一个东西,操作文件和目录路径用的,但是基本是用不到的,再用再搜吧
而且退一步来讲,你要真文件操作,放着终端不用为什么要用c语言?这不是纯纯思想有问题?
=__=
诊断
用于内部错误检测
图形
用于屏幕管理和各种图形功能
输入输出
头文件stdio.h
这个基本是必须写的,这里就不再说明了
接口
用作与DOS,BIOS和硬件的接口
字符串
字符串操作和处理
数学
用于数学或者函数运算
日期和时间
用于日期时间转换操作
自定义函数
就是自己定义的函数,一般就是有啥代码你不想一直重复写,然后把这个代码设置成你自己自定义的函数,可以实现代码复用,需要注意的是,main函数里面不可以嵌套自定义函数
基本格式如下:
返回值类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...) {
// 函数体:实现具体逻辑
return 返回值; // 若返回值类型非void
}
例:
调用方式:
1、add(1,2);
2、swap(&x, &y);(这个是指针)
int add(int a, int b) {
return a + b;
}
void swap(int *a, int *b) {
int temp = *a;
- a = *b;
- b = temp;
}
有无返回值来看
有返回值
函数调用的时候有一个结果要被返回,类型就是我们定义的一开始的返回值类型,这个一般是求和啊,求积这种的
无返回值
函数调用的时候没有返回值,这时候返回类型写函数void,这个一般是写那种功能性的代码用的
是否带参数来看
无参函数
就是自定义函数的时候不写参数,就只写一个括号
例:
int sow()
{
//这里写代码
}
这个一般是写一些不需要输入参数的功能性代码(比如说输出)
带参函数
就是上面的一般的自定义函数
比如说求和这种的需要传入参数并进行操作的代码
c语言程序结构
-
一个或者多个函数组成
-
必须包含main函
定义和返回值
定义及声明
定义
就是一个函数模块
无参函数
带参函数
空函数
比较鸡肋没有什么太大的用处其实,主要是标识程序各个功能部分用的,你完全可以不写
类型说明符 函数名()
{}
声明
先定义后调用&先调用后定义,就是有一个这个东西,但是别用第二个会出错,最好用第一个
返回值
在运用完一个函数之后的最终返回给我们的结果,在不指定返回值类型时,默认为int
返回语句
return(表达式);/return;/return 变量;
函数返回值
1、返回值类型为定义函数类型,类型如果不一样系统会进行强制转换
2、不写返回值时,依然有返回值,
return区分:
1、写在main函数的:return 0表示正常执行代码,return 非0表示异常
(这里的正常和异常是给操作系统看的,对于我们来说其实我们能看到的程序运行结果不会又什么变化,写return 非0通常是用来标记代码,也就是告诉我们自己这个代码表示的事异常状态)
比如
#include <stdio.h>
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
// 异常场景:输入的不是正整数
if (num <= 0) {
printf("错误:输入必须是正整数!\n");
return 1; // main返回1,告知系统“程序执行异常”
}
// 正常逻辑:判断是否为素数并输出
int is_prime = 1;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
printf("%d 是素数\n", num);
} else {
printf("%d 不是素数\n", num);
}
return 0; // 正常执行完,返回0
}
这里的1其实在我们编辑运行的时候和0在显示上并没有太大区别,这个就是提醒我们上面输入的是异常状态
2、写在自定义函数的:return 0表示返回数据0;return 1表示返回数据1;
这里0和1就是布尔的真和假,在我们进行函数调用的时候返回值对程序会有影响
main函数是自定义函数,为什么不需要调用?
这个是c语言编译器的一个功能,main函数不需要调用编译器就能自动识别并且执行
为什么main函数是int类型?
对应的return返回值为0;
函数间数据传递
-
主调和被调函数之间存在数据传递关系,主要有的三种形式是
-
1 实参和形参
-
2 return语句
-
3 全局变量(不常用)
-
-
实参和形参
-
实参 主函数调用定义函数的时候真正的参数
-
形参 定义的函数的参数
-
-
值传递和地址传递
-
值传递
-
实参的值赋值到形参中然后调用函数
-
地址传递
一般用于数组,数组在调用函数的时候,把数组所在的位置传给函数的形参,形参可以修改这个位置里面的所有数值然后再返回,改变这个位置的值之后这个数组的值就已经被永久修改了 -
简单变量作参数
简单变量就是我们常见的比较简单的变量 -
数组作参数
-
数组元素作为函数的实参
-
一维数组名作为函数的参数
-
多维数组名作为参数
其实区别就是一个是名字一个是元素
-
函数调用
-
函数调用的语法要求
-
参与表达式运算
-
函数调用语句
-
作为其他函数调用的实参
-
-
函数的嵌套调用
一般就是递归要写,可以定义两个函数,第二个函数可以使用第一个函数 -
函数的递归调用
汉诺塔
变量的作用域及存储类型
-
变量的作用域
-
局部变量——函数里面
-
全局变量——函数外面
-
-
变量的存储类型
-
自动变量(ato)
- 定义函数的时候用的变量
-
静态变量(static)
- static,一般是想保留上一次结果时使用
-
- 函数里的静态变量:第一次进函数时初始化,之后哪怕函数执行完结束了,它的值也不会丢,下次再调用这个函数,还能接着用上次的值。
- 全局的静态变量:只能在当前的 .c 文件里用,别的文件就算想调用也找不到它。
类比:函数里的静态变量像你宿舍的储物柜,哪怕你离开宿舍(函数结束),柜子里的东西还在;全局静态变量像你宿舍内部的公用物品,只有宿舍里的人能碰。
-
寄存器变量(register)
早期的时候提速用的,现在基本不用了,不能用&,它没有内存地址
你可以理解为“申请高速VIP席位”的变量。它请求编译器把变量存到CPU的寄存器里(不是普通内存),这样访问速度特别快,但这个请求编译器不一定答应(寄存器空间有限)。另外,这种变量不能用 & 取地址。
类比:像收银员手边的零钱盒,拿取零钱比去仓库(内存)里取快多了,但零钱盒空间小,装不下太多东西。
-
外部变量(extern)
本质是“借别人的全局变量用”。如果一个全局变量定义在A文件里,B文件想用到它,只要用 extern 声明一下,就相当于告诉编译器“这个变量在别的文件里,我要借用”。
类比:邻居家有个电钻(A文件的全局变量),你想用时不用自己买,跟邻居说一声(extern声明)就能借来用
-
变量分类总结
核心维度 对应类型 特点
存储位置 内存型 auto、static、extern 存在普通内存里
寄存器型 register 优先存CPU寄存器(看编译器脸色)
生命周期 临时型 auto 随函数创建、销毁
持久型 static、extern 程序运行期间一直存在
作用域 局部型 auto、register、函数内static 只能在函数/代码块里用
全局型 extern、全局变量 能跨文件使用(extern是声明,全局变量是定义)
内部函数和外部函数
函数的存储类型,决定了这个函数能不能被别的 .c 文件调用:
-
内部函数
用 static 修饰的函数,只能在当前 .c 文件里被调用,别的文件就算想调用也找不到它。也叫“静态函数”。
类比:你写的一个专门处理字符串的小函数,只给你当前文件的代码用,别人用不上,也不会和别人的函数重名
格式:
static 数据类型 函数名 (形参说明)
-
外部函数
C语言里函数默认就是外部的,不用写 extern 关键字。能被其他 .c 文件调用,只要在调用的文件里声明一下函数原型就行。
类比:一个公开的工具函数,比如计算两数之和的 add() ,别的文件都能拿来直接用
格式:
extern 数据类型 函数名(形参说明)
更多推荐



所有评论(0)