前提
最近在使用C语言在开发项目时,要对内存进行操作。刚开始写的时候有一点迷糊,看了一些东西后才发现为什么说指针是C语言的灵魂,因为它可以对内存直接进行操作,多么帅的事情,真的是太帅了。
malloc
声明在头文件<stdlib.h>
中。
函数定义:
void *malloc(size_t size)
函数说明:分配size个字节的未初始化内存。如果分配成功,则返回一个指针,该指针适合任何具有基本对齐方式的对象类型(可以强制类型转换为任何具有基本对齐方式的对象类型)。如果分配失败,则返回null
指针。
一般使用:int* ptr = (int *)malloc(100 * sizeof(int))
,申请100个int
的空间。
memcpy
函数定义:
从src
处copycount
个字节到dest
处,输入的指针会被强转为void *
,如果是memcpy_s
的话,destsz
指dest
处可用的字节大小。memcpy_s
是从C11才使用的,它要比memcpy
更安全,成功返回0,失败则返回非0。它可以处理以下集中情况:
dest
或者src
是一个空指针destsz
或者count
比RSIZE_MAX
大count
比destsz
大(发生溢出)src
和dest
的内存重叠
一般使用:memcpy(dst, src, 3*sizeof(int))
memccpy
将内存区域从源地址复制到目标地址,直到遇到指定的字符c
或者复制了指定的字节数count
时停止
memmove
函数定义:
和memcpy
类似,但能正确处理src
内存区域和dest
内存区域重叠的情况。如果发生重叠:先将数据copy到一个临时空间
一个例子如下:
char str[] = "1234567890";
puts(str);
memmove(str+4, str+3, 3); // copy from [4,5,6] to [5,6,7]
memset
将一块内存区域的每个字节都设置为指定的值。ch
为要设置的值,以整数形式给出,但通常使用unsigned char类型的值。这个值会被强制转换为unsigned char类型,然后被复制到内存区域中的每个字节。count
为要设置的字节数。
memcmp
用于比较两块内存区域的内容, count
为要比比较的字节数。如果相等返回0,lhs>rhs
返回正数,lhs<rhs
返回负数。谁大谁小是按照字典顺序比较的。
memchr
找到(unsigned char)ch
在制定内存中第一次出现的位置。如果找到了,则返回指向该字符的指针,如果未找到,则返回一个空指针。
一个用例:
char str[] = "abcdefg";
char *result;// 在str中搜索字符 'd'
result = (char *)memchr(str, 'd', strlen(str));
参考链接
- https://devdocs.io/c/string/byte/memccpy