「C」2022/10/26晚学习总结

OrzMiku / 2023-08-20 / 原文

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调用 ---- 搜索刚好从前一个记号尾部的空字符开始.

返回记号的第一个字符的指针. 如果找不到记号则返回空指针.

比如s1Hello World,s2空格,o就是记号,o后面的字符就会变成'\0',返回值是H的地址.这样一来,实际上返回的就是Hello这个字符串了. 第二次s1NULL,s2还是空格. 从上次的记号后面的'\0'开始.这次记号是d,d后面的字符变成了\0,返回了W的地址. 这样一来,实际上返回的就是World这个字符串.

isxdigit函数

测试是否是16进制数字.

int isxdigit(int c);

round函数(C99)

舍入到最近的整数值(四舍五入)

double round(double x);