23/3/3学习记录(C语言复习-3)
来源于https://www.runoob.com/cprogramming/c-structures.html
1. C字符串
- strcat( ) 函数
- 原型:extern char *strcat(char *dest, const char *src);
- 头文件:<string.h>
- 功能:把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容 纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针。
- strchr( ) 函数
- 原型:char *strchr(const char *str, int c)
- 头文件:<string.h>
- 功能:在参数所指向的字符串中搜索第一次出现字符(一个无符号字符)的位置。返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
- strstr( ) 函数
- 原型:string strstr( string1,string2)
- 头文件:<string.h>
- 功能:strstr返回一个指针,指向string2在string1中首次出现的位置。
2. C结构体
struct tag { member-list member-list member-list ... } variable-list ; struct tag *struct_pointer;//定义结构体指针 struct_pointer = &variable-list;//可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,把 & 运算符放在结构名称的前面 struct_pointer->member-list;//为了使用指向该结构的指针访问结构的成员,使用 -> 运算符
tag 是结构体标签。
member-list 是标准的变量定义,比如 int i; 或者 float f;,或者其他有效的变量定义。
variable-list是 结构变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量。
3. C共用体
union [union tag] { member definition; member definition; ... member definition; } [one or more union variables];
可以在同一内存空间存储不同类型的数据,但是同一时间只能让一个成员带有值。空间大小为成员中所占最大的空间。
4. C中typedef和#define
#define 是 C 指令,用于为各种数据类型定义别名,与typedef类似,但是它们有以下几点不同:
typedef仅限于为类型定义符号名称,#define不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef是由编译器执行解释的,#define语句是由预编译器进行处理的。
5. C文件读写
6. C预处理器/预处理命令
C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。把 C 预处理器(C Preprocessor)简写为 CPP
指令 | 描述 |
#define | 定义宏 |
#include | 包含一个源代码文件 |
#undef | 取消已定义的宏 |
#ifdef | 如果宏已经定义,则返回真 |
#ifndef | 如果宏没有定义,则返回真 |
#if | 如果给定条件为真,则编译下面代码 |
#else | #if 的替代方案 |
#elif | 如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码 |
#endif | 结束一个 #if……#else 条件编译块 |
#error | 当遇到标准错误时,输出错误消息 |
#pragma | 使用标准化方法,向编译器发布特殊的命令到编译器中 |
#include <stdio.h> 指令告诉 CPP 从中获取 stdio.h,并添加文本到当前的源文件中。
#inlcude "myheader.h" 告诉 CPP 从本地目录中获取 ,并添加内容到当前的源文件中。
预定义宏 ANSI C 定义了许多宏。在编程中可以使用这些宏,但是不能直接修改这些预定义的宏。
__DATE__ | 当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。 |
__TIME__ | 当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。 |
__FILE__ | 这会包含当前文件名,一个字符串常量。 |
__LINE__ | 这会包含当前行号,一个十进制常量。 |
__STDC__ | 当编译器以 ANSI 标准编译时,则定义为 1。 |
预处理器运算符
- 宏延续运算符(\) 一个宏通常写在一个单行上。但是如果宏太长,一个单行容纳不下,则使用宏延续运算符(\)
- 字符串常量化运算符(#) 在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)
- 标记粘贴运算符(##) 宏定义内的标记粘贴运算符(##)会合并两个参数。它允许在宏定义中两个独立的标记被合并为一个标记。
7. C内存管理
- malloc( ) 函数:用于动态分配内存。它接受一个参数,即需要分配的内存大小(以字节为单位),并返回一个指向分配内存的指针。
- free( ) 函数:用于释放先前分配的内存。它接受一个指向要释放内存的指针作为参数,并将该内存标记为未使用状态。
- calloc( ) 函数:用于动态分配内存,并将其初始化为零。它接受两个参数,即需要分配的内存块数和每个内存块的大小(以字节为单位),并返回一个指向分配内存的指针。
- realloc( ) 函数:用于重新分配内存。它接受两个参数,即一个先前分配的指针和一个新的内存大小,然后尝试重新调整先前分配的内存块的大小。如果调整成功,它将返回一个指向重新分配内存的指针,否则返回一个空指针。
- sizeof 运算符:用于获取数据类型或变量的大小(以字节为单位)。
- 指针运算符:用于获取指针所指向的内存地址或变量的值。
- & 运算符:用于获取变量的内存地址。
- 运算符:用于获取指针所指向的变量的值。
- memcpy( ) 函数:用于从源内存区域复制数据到目标内存区域。它接受三个参数,即目标内存区域的指针、源内存区域的指针和要复制的数据大小(以字节为单位)。
- memmove( ) 函数:类似于 memcpy() 函数,但它可以处理重叠的内存区域。它接受三个参数,即目标内存区域的指针、源内存区域的指针和要复制的数据大小(以字节为单位)。
8. 排序算法
为了华为od机试刷题学习记录