目錄
前言:
一、內存復制函數?
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語言 知識點到此大部分講述完畢,文件操作咱們下章再見!!!!