一篇文章让你看懂C语言字符函数和内存函数(下)

简介: 一篇文章让你看懂C语言字符函数和内存函数(下)

二、内存函数


1.memcpy函数


4dd12cefa0c84c67862830fcedbaf70a.png


1.1memcpy函数的介绍


通过查询我们可知:用于将一段内存的内容复制到另一段内存区域。

1. 函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。

2. 这个函数在遇到 '\0' 的时候并不会停下来。

3. 如果source和destination有任何的重叠,复制的结果都是未定义的


1.2 memcpy函数的使用


将arr1中的40个字节的数据复制到arr2中

int main()
{
  int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
  int arr2[20] = { 0 };
  memcpy(arr2, arr1, 40);
  int i = 0;
  for (i = 0; i < 20; i++)
  {
    printf("%d ", arr2[i]);
  }
  return 0;
}


66b365c1a93b408eb36a3a6df2cd01d9.png


1.3模拟实现memcpy

178891225c974db2a555e8c9df8c8d2d.png

void* my_memcpy(void* dest, void* src, size_t num)
{
  void* ret = dest;
  while (num--)
  {
    *(char*)dest = *(char*)src;
    dest = (char*)dest + 1;
    src = (char*)src + 1;
  }
  return ret;
}
int main()
{
  int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
  int arr2[20] = { 0 };
  my_memcpy(arr2, arr1, 40);
  int i = 0;
  for (i = 0; i < 20; i++)
  {
    printf("%d ", arr2[i]);
  }
  return 0;
}


178891225c974db2a555e8c9df8c8d2d.png


2.memmove函数


090558f6e1fc4c5aa86f021a29219722.png


2.1memmove函数的介绍


通过查询我们可知:用于在内存中移动一段数据块的内容。

1. 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

2. 如果源空间和目标空间出现重叠,就得使用memmove函数处理。


2.2memmove函数的使用


int main()
{
  int arr1[10] = { 1,2,3,4,5,6,7,8,9,0 };
  memmove(arr1 + 2, arr1, 20);
  int i = 0;
  for (i = 0; i < 10; i++)
  {
    printf("%d ", arr1[i]);
  }
  return 0;
}


65a07543ccfd4a9ba159414930d70760.png


2.3模拟实现memmove


void* my_memmove(void* dest, void* src,size_t num)
{
  void* ret = dest;
  if (dest < src)
  {
    while (num--)
    {
      *(char*)dest = *(char*)src;
      dest = (char*)dest + 1;
      src = (char*)src + 1;
    }
  }
  else
  {
    while (num--)
    {
      *((char*)dest + num) = *((char*)src + num);
    }
  }
  return ret;
}
int main()
{
  int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
  my_memmove(arr1, arr1+2 ,20);
  int i = 0;
  for (i = 0; i < 10; i++)
  {
    printf("%d ", arr1[i]);
  }
  return 0;
}


252c7cdd292d49eeb7193802a6214aeb.png

相关文章
|
19小时前
|
程序员 编译器 C语言
C语言----动态内存分配(malloc calloc relloc free)超全知识点
C语言----动态内存分配(malloc calloc relloc free)超全知识点
14 6
|
19小时前
|
存储 程序员 编译器
C语言:动态内存管理
C语言:动态内存管理
11 1
|
19小时前
|
存储 编译器 程序员
C语言:数据在内存中的存储
C语言:数据在内存中的存储
13 2
|
20小时前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
15 2
|
19小时前
|
编译器
练习使用动态内存相关的4个函数:malloc、calloc、realloc、free
在了解使用动态内存相关的四个函数之前,我们先了解一下,为什么要有动态内存分配?
16 0
|
20小时前
|
存储 编译器 C++
【C++】内存管理和模板基础(new、delete、类及函数模板)
【C++】内存管理和模板基础(new、delete、类及函数模板)
22 1
|
19小时前
|
编译器 C语言 C++
详解内存操作函数
详解内存操作函数
|
19小时前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
19小时前
|
存储 C语言 开发者
【C言专栏】C 语言实现动态内存分配
【4月更文挑战第30天】C语言中的动态内存分配允许程序运行时按需分配内存,提供处理未知数据量的灵活性。这涉及`malloc()`, `calloc()`, `realloc()`, 和 `free()`四个标准库函数。`malloc()`分配指定大小的内存,`calloc()`同时初始化为零,`realloc()`调整内存大小,而`free()`释放内存。开发者需谨慎处理内存泄漏和指针使用,确保程序的稳定性和性能。动态内存分配是C语言中的重要技能,但也需要良好的内存管理实践。
|
20小时前
|
存储 程序员 C语言
C语言进阶第九课 --------动态内存管理-2
C语言进阶第九课 --------动态内存管理

热门文章

最新文章