导图社区 C语言全面、总体、详细的介绍(第一版)
C语言全面、总体、详细的介绍(第一版),大一新生自己弄的C语言思维导图,求各位大佬帮我纠错,谢谢大家!
编辑于2025-02-24 00:12:51C语言
问题
int和char有何区别?
size_t类型是个什么玩意?
优点
缺点
常识
注意事项
变量
数据类型
限定符
关键字
运算符
函数
子主题完成特定任务的独立程序代码单元。语法规则定义了函数的结构和使用方式。
格式
返回值类型 函数名 (形式参数列表) { 函数体 }
在程序中,函数名一般会在三种途径被使用
程序开头函数的声明
函数的调用
函数的定义
在调用一个有参数的函数时,函数名后边括号中的参数叫作实际参数,简称实参。而被调用的函数在进行定义时,括号里的参数叫作形式参数,简称形参。
函数定义中指定的形参为局部变量,在未发生函数调用时不占内存,只有函数调用时,函数中的形参才被分配内存单元。 在调用结束后,形参所占的内存单元也被释放。
形参必须指定数据类型,和定义变量一样,因为它本来就是局部变量。
主调函数在调用函数之前,应对被调函数做原型声明。
实参可以是常量,也可以是简单或者复杂的表达式,但是要求它们必须有确定的值, 在调用发生时将实参的值传递给形参。
实参和形参的数据类型应该相同或者赋值兼容。 和变量赋值一样, 当形参和实参出现不同类型时,按照不同类型数值的赋值规则进行转换。
实参向形参的数据传递是单向传递,不能由形参再回传给实参。 也就是说,实参值传递给形参后,调用结束,形参单元被释放,而实参单元仍保留并且维持原值。
注:各种函数格式中的size_t、int、void*等前缀都是为了方便理解,在实际操作中是不会写出来的。
C89
assert.h断言
ctype.h字符串分类
errno.h错误码
float.h浮点数宏定义
limits.h最大值与最小值
locale.h本地化
math.h数学运算
setjmp.h长跳转
signal.h信号
stdarg.h可变参数
stddef.h常用定义
stdio.h输入/输出
stdlib.h通用工具
提供内存分配与释放、随机数的生成、进程退出、执行命令行、字符串转数值类型、二分查找算法、快排算法、求绝对值等操作。
malloc
用于申请一块连续的指定大小的内存块区域,以void*类型返回分配的内存区域地址。
格式
void *malloc(unsigned size)
malloc(数字)
注:实现原理:链表连接所有空闲的空间,组成最终分配的空间。
注:返回类型为无类型(void)指针,也即是通用指针,本质上是内存地址,需要进行类型转换。
注:在使用完malloc函数开辟的空间之后,需要释放(free函数),否则会造成内存泄漏。
注:在使用malloc函数开辟的空间中,不要移动指针,否则可能出现申请的空间和释放的空间大小不一致。
free
释放不需要的内存空间。
格式
void free(void *ptr)
free(参数)
注:在申请内存之后,需要及时将不再使用的内存空间进行释放,否则会导致内存耗尽。
calloc
为n个元素的数组分配内存,每个元素长度为size个字节
格式
void *calloc(unsigned n,unsigned size)
calloc(数字1,数字2)
注:与malloc() 函数的区别:calloc()函数会将所有字节置0来初始化该内存空间
realloc
为数组分配空间之后,若发现数组过大或过小,realloc() 函数可以调整已申请内存的大小。
格式
void *realloc(void *ptr,unsigned size)
realloc(参数,数字)
ptr指向原先通过malloc()、calloc()或realloc()获得的内存块。
size为内存块的新大小。
注:当分配内存减小时,realloc()仅改变索引信息
注:当分配内存扩大时
当前内存后还有空间:直接扩展这段内存空间,realloc()函数返回原指针。
当前内存后空闲字节不够:使用堆中第一个能够满足这一要求的内存块, 并将目前的数据复制到新位置,将原来的空间释放掉,返回新的内存块地址。
申请失败:返回NULL,此时,原来指针仍然有效。
注:当ptr为空指针时,realloc()函数作用等同于malloc()函数;
atoi
将数字字符的字符串转换为整型返回
格式
int atoi (const char * str)
atof(参数)
注:如果字符串从开头就有连续的空格字符,则跳过这些连续的空格字符,找到不是空格的字符。
注:如果跳过这些空格字符后的第一个字符不是数字字符,则直接返回0。
注:如果跳过这些空格字符后的第一个字符是数字字符,则从这个数字字符开始转换,并向后找连续的数字字符转换,如果连续中断,找到不是数字字符的字符,则在此截断寻找,返回前面已经转换好的连续的数字字符字面整型值。 (这里截断向后寻找后,不管后面有没有数字字符函数都不管)
注:如果字符串全部为空格字符,返回0;如果为空字符串,返回0;
atof
把字符串转换成浮点数,直至遇到第一个空格。
格式
double atof(const char *nptr)
atof(参数)
itoa
将整数转换为字符串。
格式
char* itoa(int value,char* string,int radix)
itoa(数字,参数,数字)
value是要转换的整数值。
string是存储转换后值的字符数组。
radix代表进制,radix=10就是十进制,radix=2就是二进制。
注:第二个参数只能是char*,不能是string;
注:第二个参数在使用之前必须提前分配存储空间。
string.h字符串
提供了用于进行字符串操作(包括复制、拼接、比较及搜索)的函数以及对任意内存块进行操作的函数。
注:凡是字符串,结尾必须有终止符"/n"
strlen
计算字符串中字符的个数
格式
size_t strlen( const char *string )
strlen(参数)
注:strlen函数的返回值是size_t(unsigned int),是无符号的;
strcpy
将第二个字符串覆盖复制到第一个字符串。
格式
char *strcpy( char *strDestination,const char *strSource )
strcpy (参数1,参数2)
strncpy
将第二个字符串覆盖复制到第一个字符串,但它允许我们指定要覆盖复制的字符数量。
格式
char *strncpy(char *dest,const char *src,size_t n)
strncpy(参数1,参数2,数字)
strcat
将第二个字符串复制添加到第一个字符串末尾。
格式
char *strcat( char *strDestination,const char *strSource )
strcat (参数1,参数2)
注:不可自己追加自己,需要这样做则使用strncat
strncat
将第二个字符串复制添加到第一个字符串末尾,但它允许我们指定要添加的字符数量。
格式
char * strncat ( char * destination,const char * source,size_t num )
strncat(参数1,参数2,数字)
注:数字表明复制第二个字符串的前“数字”个字符到第一个字符串的末尾。
strcmp
比较字符串1与字符串2的大小
格式
int strcmp( const char *string1,const char *string2 )
strcmp(参数1,参数2 )
注:如果字符串1大于字符串2,则返回大于0的值 ,如果字符串1小于字符串2,则返回小于0的值, 如果字符串1等于字符串2,则返回0。
注:从字符串1和字符串2的首字符开始比较,比较它们的ASCII值, 如果相等就比较下一个字符的ASCII值(包括\0), 直到得出结果(两者比较到\0处后还相等,那就证明两字符串相等)。
strncmp
比较字符串1与字符串2前n个字符的大小
格式
int strncmp(const char* str1,const char* str2,size_t num)
strncmp(参数1,参数2,数字)
注:数字表明比较字符串1与字符串2前“数字”个字符的大小
注:如果字符串1大于字符串2,则返回大于0的值,如果字符串1小于字符串2,则返回小于0的值, 如果字符串1等于字符串2,则返回0。
注:从字符串1和字符串2的首字符开始比较,比较它们的ASCII值, 如果相等就比较下一个字符的ASCII值(包括\0), 直到得出结果(两者比较到\0处后还相等,那就证明两字符串相等)。
strchr
在一个字符串中查找给定字符的第一个匹配之处,并返回指向该字符的指针。如果没有找到该字符,则返回 NULL。
格式
char *strchr(const char *str,int c)
strchr(参数,字符)
str:要查找的字符串,必须是一个以空字符 ‘\0’ 结尾的字符数组,也就是 C 语言中的字符串类型。
c:要查找的字符,必须是一个整型值,通常是一个字符常量或变量,例如 ‘a’ 或 ch。如果 c 是一个多字节字符,例如汉字,那么只会查找其第一个字节。
注:对于大小写敏感,会区分字符 ‘a’ 和 ‘A’。
注:对于多字节字符的支持不完善,也就是说,它只会查找多字节字符的第一个字节。
strrchr
在给定的字符串中从末尾开始搜索指定的字符,返回一个指向该字符最后一次出现的指针。如果字符在字符串中不存在,则返回 NULL。
格式
char *strrchr(const char *str,int c)
strrchr(参数,字符)
const char *str:这是一个指向字符串的指针,表示要搜索的字符串。该字符串以空字符(\0)结尾。
int c:这是要查找的字符的ASCII码值。函数会在字符串str中搜索与该ASCII码值对应的字符
注:对于大小写敏感,会区分字符 ‘a’ 和 ‘A’。
注:对于多字节字符的支持不完善,也就是说,它只会查找多字节字符的第一个字节。
strpbrk
在目标字符串s1中查找任意一个包含在字符串s2中的字符首次出现的位置,并返回指向该位置的指针;如果没有找到,则返回空指针。
格式
char *strpbrk(const char *s1,const char *s2)
strpbrk(参数1,参数2)
strspn
返回字符串中第一个不在指定字符串中出现的字符下标
格式
size_t strspn(char const *str,char const *grouo)
strspn(参数1,参数2)
注:从str的第一个元素开始往后数,看str中是不是连续往后每个字符都在group中可以找到。到第一个不在gruop的元素为止。
注:返回值类型为整型,大小为停止时在str中已对比过的元素个数。
strstr
用于查找子字符串在主字符串中的第一次出现
格式
char *strstr(const char *haystack,const char *needle)
strstr(参数1,参数2)
haystack:指向要搜索的主字符串的指针。
needle:指向要查找的子字符串的指针。
注:返回一个指向haystack中第一次出现needle的指针。如果未找到子字符串,则返回NULL。
strtok
分解长字符串
格式
char *strtok(char *str, const char *delim)
strtok(参数1,参数2)
str—要被分解的字符串
delim—用作分隔符的字符。 (可以是一个,也可以是集合)
strtok()的第二个参数delim可以是所有分隔符的集合, 比如{aaa - bbb ; ccc | ddd},第二个参数delim可以是{-;|},用一个或多个分隔符去分解字符串都可以。
注:该函数返回被分解的第一个子字符串,若无可检索的字符串,则返回空指针。
注:第一次调用strtok(),传入的参数str是要被分割的字符串{aaa - bbb -ccc},而成功后返回的是第一个子字符串{aaa}。
而第二次调用strtok的时候,传入的参数应该为NULL, 使得该函数默认使用上一次未分割完的字符串继续分割 , 就从上一次分割的位置{aaa-}作为本次分割的起始位置,直到分割结束。
注:在这个函数里strtok()在分解字符串的时候,第一个参数str是在不断变化的,这个函数是在改变原字符串,把原字符串{aaa - bbb - ccc}通过第二个参数delim将所有的分割符{-}替换成字符串结束标志字符{\0}, 则原字符串变化为{aaa \0 bbb \0 ccc}。
注:当strtok分解的字符串首字符就是分隔符,那么strtok()会忽略首个分隔符,直接从第二个分隔符往下继续分解,例如:{- aaa - bbb - ccc} 那么strtok()会忽略第一个{-},还是以{aaa - bbb - ccc}的字符串形式继续分解。
memset
将已开辟内存空间 s 的首 n 个字节的值设为值 c。
格式
void *memset(void *s,int c,size_t n)
memset(参数,数字1,数字2)
memcpy
从源头指向的内存块拷贝固定字节数的数据到目标指向的内存块.
格式
void * memcpy ( void * destination,const void * source,size_t num )
memcpy(参数1,参数2,数字)
注:源头的内存块与目标内存块不可以重叠。
注:能够作用于任何类型的数据包括(浮点型,结构体等等)。
注:与strcpy()函数不同,不会检查任何终止字符(如'\0'),而总是精确的拷贝参数传入的字节数。
memmove
从源头指向的内存块拷贝固定字节数的数据到目标指向的内存块。
格式
void * memmove ( void * destination,const void * source,size_t num )
memmove(参数1,参数2,数字)
从参数2拷贝“数字”个字节的数据到参数1。
注:源头的内存块与目标内存块可以重叠。
memcmp
比较参数1和参数2前n个字节数据的大小
格式
int memcmp(const void* dest,const void* rsc,size_t count)
memcmp(参数1,参数2,数字)
注:如果参数1大于参数2,则返回大于0的值,如果参数1小于参数2,则返回小于0的值, 如果参数1等于参数2,则返回0。
注:从参数1和参数2的首个字节数据开始比较,比较它们的ASCII值, 如果相等就比较下一个字节数据的ASCII值(包括\0), 直到得出结果(两者比较到\0处后还相等,那就证明两参数相等)。
bzero
将字符串s的前n个字节置为0
格式
void bzero(void *s,int n)
bzero(参数,数字)
注:此函数为废弃函数,部分编译器不支持。
time.h系统时间
C99
C11
windows平台
Linux平台
语句
0-1-1_1
0-1-1_2
0-1-1_3
0-1-2
0-1-3
0-1-4
0-1-5
1-5-1
1-4
0-0-1
0-0-2
0-0-3