目录
前言:
一、内存复制函数
1. memcpy - 内存块复制
2. memmove - 内存块移动
二、内存设置函数
1. memset - 内存块填充
三、内存比较函数
1. memcmp
2.memchr
三·内存分配函数
1 .malloc
2.free
总结:
注意事项:
前言:
在 C 语言中,内存函数是用于直接操作内存区域的函数,它们位于<string.h>
头文件中。这些函数不依赖于特定的数据类型,而是基于内存地址和字节操作,因此具有很高的通用性。
以下是 C 语言中核心内存函数的详细总结:
一、内存复制函数
1. memcpy
- 内存块复制
void *memcpy(void *dest, const void *src, size_t n);
- 功能:从
src
复制n
个字节到dest
。 - 注意:
- 若
dest
和src
内存区域重叠,结果未定义(推荐使用memmove
处理重叠情况)。 - 返回指向
dest
的指针。
- 若
示例:
#include <stdio.h>
#include <string.h>
int main()
{int arr1[5] = { 1, 2, 3, 4, 5 };int arr2[5];memcpy(arr2, arr1, sizeof(arr1)); // 复制整个数组将1 的复制到2for (int i = 0;i < 5;i++){printf("%d ", arr2[i]);}return 0;
}
2. memmove
- 内存块移动
void *memmove(void *dest, const void *src, size_t n);
-
功能:将
n
个字节的数据从源内存区域src
复制到目标内存区域dest
,可以处理源和目标内存块重叠的情况。 -
原型:
void *memmove(void *dest, const void *src, size_t n);
-
示例:
char str[] = "memmove can be very useful......"; memmove(str + 20, str + 15, 11);
-
返回值:返回目标存储区
dest
的指针。
示例:
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
// 将前5个元素后移2位
memmove(arr+2, arr, 5 * sizeof(int));
// 结果:arr = {0,1,0,1,2,3,4,7,8,9}
for (int i = 0;i < 10 ;i++)
{printf("%d ", arr[i]);
}
二、内存设置函数
1. memset
- 内存块填充
- 功能:将
s
的前n
个字节设置为字符c
(转换为unsigned char
)。 - 常见用途:
- 初始化数组为 0:
memset(arr, 0, sizeof(arr));
- 初始化结构体:
memset(&obj, 0, sizeof(obj));
- 初始化数组为 0:
示例:
char str[10];
memset(str, 'A', 5); // str = "AAAAA\0\0\0\0\0"
后面为乱序自由生成
三、内存比较函数
1. memcmp
int memcmp(const void *s1, const void *s2, size_t n);
- 功能:比较
s1
和s2
的前n
个字节。 - 返回值:
- 如果
s1 < s2
,返回一个小于0的值。 - 如果
s1 == s2
,返回0。 - 如果
s1 > s2
,返回一个大于0的值
- 如果
示例:
int arr1[3] = {1, 2, 3};
int arr2[3] = {1, 2, 4};
int result = memcmp(arr1, arr2, sizeof(arr1)); // result < 0
2.memchr
- 功能:在
s
指向的内存区域的前n
个字节中查找字符c
。 - 原型:
void *memchr(const void *s, int c, size_t n);
- 返回值:
- 如果找到字符
c
,返回指向该字符的指针。 - 如果未找到字符
c
,返回NULL
。
- 如果找到字符
示例:
char str[] = "hello world";
char *ptr = memchr(str, 'w', strlen(str));
三·内存分配函数
虽然题目主要集中在内存操作函数上,但为了完整性,这里也简要介绍几个常用的内存分配函数:
1 .malloc
-
功能:动态分配指定大小的内存空间。
-
原型:
void *malloc(size_t size);
-
示例:
int *ptr = (int *)malloc(5 * sizeof(int));
-
注意事项:分配的内存需要使用
free
函数释放,否则会导致内存泄漏。
2.free
- 功能:释放之前通过
malloc
、calloc
或realloc
分配的内存。 - 原型:
void free(void *ptr);
- 示例:
free(ptr);
总结:
注意事项:
- 动态分配的内存需要及时释放(free),以避免内存泄漏。
- 使用这些函数时,确保提供的指针和大小参数是有效的,以防止未定义行为。
C语言 知识点到此大部分讲述完毕,文件操作咱们下章再见!!!!