2022/10/26 晚 学习总结
主要内容范围: 教材23章
今晚浅学了一点点东西,记录一下.
fma函数
在 math.h 里,浮点数乘加,比自己手动算精度高.
double fma(double x, double y, double z);
返回值: x*y+z
memcpy函数
在 string.h 里, 内存复制,他和strcpy的区别是,他不仅仅能复制字符串,别的类型也可以.
void *memcpy(void * restrict s1,void * restrict s2,size_t n);
把s2复制到``s1,大小n`个字节.
memmove函数
同上, 更安全. (即使对象重叠也能用)
void *memmove(void * restrict s1,void * restrict s2,size_t n);
把s2复制到``s1,大小n`个字节.
memset函数
初始化内存块
void *memset(void *s, int c, size_t n);
把c存到s指向的对象的前n个字符中.
memxxx
类似的,还有memchr,memcmp这俩,和str的版本区别就在于mem的版本是对内存操作,不局限于字符串.
strtok函数
我感觉这个函数真的抽象
一个字符串查询函数,应该算是字符串查询函数里最复杂的一个了.
strtok - 搜索字符串中的记号
char *strtok(char * restrict s1, const char * restrict s2);
我这里还是贴一段书上的描述吧:
在
s1指向的字符串中寻找满足下列条件的记号:
- 组成此记号的字符不在
s2所指的字符串中.如果存在这样的记号,就把该记号后面的字符变成空字符.
如果
s1是空指针, 则继续最近一次strtok调用 ---- 搜索刚好从前一个记号尾部的空字符开始.返回记号的第一个字符的指针. 如果找不到记号则返回空指针.
比如s1是Hello World,s2是空格,o就是记号,o后面的字符就会变成'\0',返回值是H的地址.这样一来,实际上返回的就是Hello这个字符串了. 第二次s1是NULL,s2还是空格. 从上次的记号后面的'\0'开始.这次记号是d,d后面的字符变成了\0,返回了W的地址. 这样一来,实际上返回的就是World这个字符串.
isxdigit函数
测试是否是16进制数字.
int isxdigit(int c);
round函数(C99)
舍入到最近的整数值(四舍五入)
double round(double x);