本文最后更新于 214 天前,其中的信息可能已经有所发展或是发生改变。
函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。
int plus_one(int n) {
return n + 1;
}
函数的主要内容在初识里面我就已经说的比较详细了。本文介绍一下常用的函数。1.1 和1.2用的最多
C语言常用函数整理
输入/输出函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
printf | 格式化输出数据到标准输出设备(通常是屏幕)。 | printf("Hello, World! %d\n", 2024); |
scanf | 从标准输入读取格式化数据。 | scanf("%d", &num); |
puts | 输出字符串到标准输出,并自动添加换行符。 | puts("Hello, World!"); |
getchar | 从标准输入读取一个字符。 | char c = getchar(); |
putchar | 输出一个字符到标准输出。 | putchar('A'); |
字符串操作函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
strcpy | 复制源字符串到目标字符串。 | strcpy(dest, src); |
strncpy | 复制源字符串的前n个字符到目标字符串。 | strncpy(dest, src, 5); |
strcat | 将源字符串连接到目标字符串末尾。 | strcat(dest, src); |
strlen | 返回字符串长度(不包括空字符\0)。 | size_t len = strlen(str); |
strcmp | 比较两个字符串。 | if (strcmp(str1, str2) == 0) { ... } |
strstr | 查找字符串中第一次出现的子串。 | char *pos = strstr(str, "World"); |
内存管理函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
malloc | 动态分配指定字节数的内存块。 | int *arr = (int *)malloc(5 * sizeof(int)); |
calloc | 动态分配内存并初始化为零。 | int *arr = (int *)calloc(5, sizeof(int)); |
realloc | 调整已分配内存块的大小。 | arr = (int *)realloc(arr, 10 * sizeof(int)); |
free | 释放之前分配的内存。 | free(arr); |
数学函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
pow | 计算一个数的指定幂次。 | double result = pow(2.0, 3.0); |
sqrt | 计算平方根。 | double root = sqrt(16.0); |
sin | 计算弧度的正弦值。 | double s = sin(3.14159 / 2); |
cos | 计算弧度的余弦值。 | double c = cos(0.0); |
tan | 计算弧度的正切值。 | double t = tan(3.14159 / 4); |
log | 计算自然对数。 | double ln = log(2.71828); |
时间函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
time | 返回自1970年1月1日以来的秒数(Unix时间戳)。 | time_t now = time(NULL); |
difftime | 返回两个时间点之间的时间差(秒)。 | double diff = difftime(time2, time1); |
clock | 返回程序执行时间(时钟周期)。 | clock_t start = clock(); |
strftime | 将时间转换为字符串。 | strftime(buf, 100, "%Y-%m-%d", timeinfo); |
文件操作函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
fopen | 打开文件并返回文件指针。 | FILE *fp = fopen("file.txt", "r"); |
fclose | 关闭文件,释放资源。 | fclose(fp); |
fread | 从文件读取数据到内存。 | fread(buffer, sizeof(char), 100, fp); |
fwrite | 将内存中的数据写入文件。 | fwrite(data, sizeof(char), 100, fp); |
fscanf | 从文件读取格式化数据。 | fscanf(fp, "%d", &num); |
fprintf | 向文件写入格式化数据。 | fprintf(fp, "Value: %d\n", num); |
布尔类型及相关函数()
函数名 | 概念功能 | 使用示例 |
---|---|---|
bool | 定义布尔类型。 | bool isEven = (num % 2 == 0); |
true | 表示真(值为1)。 | if (isEven == true) { printf("Even number.\n"); } |
false | 表示假(值为0)。 | if (isEven == false) { printf("Odd number.\n"); } |
其他常用函数
函数名 | 概念功能 | 使用示例 |
---|---|---|
#define | 宏定义,用于定义常量或宏函数。 | #define PI 3.14159 |
typedef | 为现有类型定义新名称。 | typedef unsigned long ulong; |
enum | 定义枚举类型。 | enum Color { RED, GREEN, BLUE }; |
struct | 定义结构体。 | struct Point { int x; int y; }; |
sizeof | 返回类型或变量的大小(字节)。 | size_t size = sizeof(int); |
typecast | 类型转换,将一种数据类型转换为另一种。 | double num = (double)intVar; |
printf()
printf()
的作用是将参数文本输出到屏幕。它名字里面的f
代表format
(格式化),表示可以定制输出文本的格式。
printf("Hello World");
上面命令会在屏幕上输出一行文字“Hello World”。
printf()
不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。为了让光标移到下一行的开头,可以在输出文本的结尾,添加一个换行符\n
。
printf("Hello World\n");
占位符
printf()
可以在输出文本中指定占位符。所谓“占位符”,就是这个位置可以用其他值代入。
// 输出 There are 3 apples
printf("There are %i apples\n", 3);
面示例中,There are %i apples\n
是输出文本,里面的%i
就是占位符,表示这个位置要用其他值来替换。占位符的第一个字符一律为百分号%,第二个字符表示占位符的类型,%i表示这里代入的值必须是一个整数。
printf()
的第二个参数就是替换占位符的值,上面的例子是整数3
替换%i
。执行后的输出结果就是There are 3 apples
。
printf()
的占位符有许多种类,与 C 语言的数据类型相对应。下面按照字母顺序,列出常用的占位符,方便查找。
%a
:十六进制浮点数,字母输出为小写。%A
:十六进制浮点数,字母输出为大写。%c
:字符。%d
:十进制整数。%e
:使用科学计数法的浮点数,指数部分的e
为小写。%E
:使用科学计数法的浮点数,指数部分的E
为大写。%i
:整数,基本等同于%d
。%f
:小数(包含float
类型和double
类型)。%g
:6个有效数字的浮点数。整数部分一旦超过6位,就会自动转为科学计数法,指数部分的e
为小写。%G
:等同于%g
,唯一的区别是指数部分的E
为大写。%hd
:十进制 short int 类型。%ho
:八进制 short int 类型。%hx
:十六进制 short int 类型。%hu
:unsigned short int 类型。%ld
:十进制 long int 类型。%lo
:八进制 long int 类型。%lx
:十六进制 long int 类型。%lu
:unsigned long int 类型。%lld
:十进制 long long int 类型。%llo
:八进制 long long int 类型。%llx
:十六进制 long long int 类型。%llu
:unsigned long long int 类型。%Le
:科学计数法表示的 long double 类型浮点数。%Lf
:long double 类型浮点数。%n
:已输出的字符串数量。该占位符本身不输出,只将值存储在指定变量之中。%o
:八进制整数。%p
:指针。%s
:字符串。%u
:无符号整数(unsigned int)。%x
:十六进制整数。%zd
:size_t
类型。%%
:输出一个百分号。