当前位置: 首页 > news >正文

单页面推广网站模版微信公众号网站制作

单页面推广网站模版,微信公众号网站制作,南宁在线制作网站,做建材商城网站文章目录 一、memcpy函数的使用和模拟实现1.1 memcpy函数的使用1.2 memcpy函数的模拟实现 二、memmove函数的使用和模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现 三、memset函数的使用3.1 menset函数的使用 四、memcmp函数的使用4.1 memcmp函数的使用 学海无涯苦作… 文章目录 一、memcpy函数的使用和模拟实现1.1 memcpy函数的使用1.2 memcpy函数的模拟实现 二、memmove函数的使用和模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现 三、memset函数的使用3.1 menset函数的使用 四、memcmp函数的使用4.1 memcmp函数的使用 学海无涯苦作海 创作不易宝子们如果这篇文章对你们有帮助的话别忘了给个免费的赞哟~ 一、memcpy函数的使用和模拟实现 函数原型 void * memcpy ( void * destination, const void * source, size_t num );内存复制块 将num字节的值从源指向的位置直接复制到目标指向的内存块。源指针和目标指针所指向的对象的底层类型与此函数无关;结果是数据的二进制副本。该函数不检查源中是否有任何终止null字符——它总是精确地复制num个字节。为了避免溢出目标参数和源参数所指向的数组的大小应该至少为num字节并且不应该重叠(对于重叠的内存块memmove是一种更安全的方法)。 1.1 memcpy函数的使用 【示例】将arr1中的前5个元素拷贝到arr2中 #includestdio.h #includestring.hint main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] { 0 };memcpy(arr2, arr1, 20);for (int i 0; i 20; i){printf(%d , arr2[i]);}return 0; }1.2 memcpy函数的模拟实现 模拟思路 函数参数和返回类型mencpy不仅可以将拷贝整形数据其他的数据类型也可以拷贝即参数类型根据传入的数据类型决定需要接受任意类型的地址所以参数类型可以定义成void*因为src是原数据我们不期望它被修改所以要加const进行修饰还需要指定拷贝num字节的值即num要为非负数为了避免传入进来的num是一个负数可以将num定为size_t类型memcpy返回的是目标空间的起始地址即返回类型我们也定为void* 。 函数体首先用assert断言判断传入进来的是否为空指针void* 类型的指针不可以直接解引用这里的num是指字节数不同的数据类型所占的字节数不同所以最好一个一个字节访问即将 void* 强转成 char* (解引用时一次访问一个字节)类型每访问一个字节后就自增一拷贝完成后这时的dest已经不再指向首元素地址所以在这之前要创建一个void* 的指针记录dest最后返回记录dest的指针即可。 模拟代码 #includestdio.h #includeassert.hvoid* my_memcpy(void* dest, const void* src, size_t num) {assert(dest src);void* ret dest;while (num--){*(char*)dest *(char*)src;src (char*)src 1;dest (char*)dest 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, 20);for (int i 0; i 20; i){printf(%d , arr2[i]);}return 0; }注意memcpy函数不可以拷贝重叠的内存块(虽然也能实现)但不安全对于重叠的内存块memmove是一种更安全的方法。 二、memmove函数的使用和模拟实现 函数原型 void * memmove ( void * destination, const void * source, size_t num );移动内存块 将num字节的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓冲区一样进行从而允许目标和源重叠。源指针和目标指针所指向的对象的底层类型与此函数无关;结果是数据的二进制副本。该函数不检查源中是否有任何终止null字符——它总是精确地复制num个字节。为了避免溢出目的参数和源参数所指向的数组的大小至少为num字节。 memcpy与memmove的区别就在于memmove可以复制重叠的内存块。 2.1 memmove函数的使用 【示例】将arr1中的12345这几个元素拷贝到arr1中的34567的位置。 #includestdio.h #includestring.h int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 2, arr1, 5 * sizeof(int));for (int i 0; i 10; i){printf(%d , arr1[i]);}return 0; }2.2 memmove函数的模拟实现 模拟思路 函数参数和返回类型和memcpy函数一致这里就不多作介绍了。 函数体这里总体要分两种情况一种是destsrc另一种就是destsrc对于第一种情况需要从前向后拷贝对于第二种情况需要从后向前拷贝至于不重叠的话无论是从前向后还是从后向前都是可以的。从前向后拷贝的方法和memcpy是一致的这里就不多说了从后向前拷贝也比较简单src强转成 char* 之后加上num就是最后一个字节然后num不断自减就可以实现从后向前拷贝。 模拟代码 #includestdio.h #includeassert.h void* my_memmove(void* dest, const void* src, size_t num) {assert(dest src);void* ret dest;if (dest src){// 前--后while (num--){*(char*)dest *(char*)src;src (char*)src 1;dest (char*)dest 1;}}else {// 后--前while (num--){*((char*)dest num) *((char*)src num);}}return ret; }int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr1 2, arr1, 5 * sizeof(int));for (int i 0; i 10; i){printf(%d , arr1[i]);}return 0; }三、memset函数的使用 函数原型 void * memset ( void * ptr, int value, size_t num );填充内存块 将ptr指向的内存块的前num个字节设置为指定的值(解释为unsigned char)。 参数说明 ptr 指向要填充的内存块的指针。 value 需要设置的值。该值作为int类型传递但函数使用该值的unsigned char转换来填充内存块。 num 要设置为该值的字节数。size_t是一个无符号整型。 3.1 menset函数的使用 【示例】将arr数组中的hello替换成x #includestdio.h #includestring.h int main() {char arr[] hello world;memset(arr, x, 5);printf(%s\n, arr);return 0; }注意这里的num指的是该值的字节数。 四、memcmp函数的使用 函数原型 int memcmp ( const void * ptr1, const void * ptr2, size_t num );比较两个内存块 将ptr1所指向的内存块的前num字节与ptr2所指向的前num字节进行比较如果它们都匹配则返回0如果不匹配则返回不同于0的值表示哪个值更大。 参数说明 ptr1 指向内存块的指针。 ptr2 指向内存块的指针。 num 要比较的字节数。 注意与strcmp不同该函数在找到空字符后不会停止比较。 return value(返回值)indicates(含义)0在两个内存块中不匹配的第一个字节在ptr1中的值低于ptr2中的值(如果作为unsigned char值计算)0两个内存块的内容是相等的.0在两个内存块中不匹配的第一个字节在ptr1中的值大于ptr2中的值(如果作为unsigned char值计算) 4.1 memcmp函数的使用 【示例】比较arr1数组和arr2数组中前16个字节在比较前17个字节。 #includestdio.h #includestring.h int main() {int arr1[] { 1,2,3,4,5,6,7 };int arr2[] { 1,2,3,4,8,8,8 };int ret1 memcmp(arr1, arr2, 16);int ret2 memcmp(arr1, arr2, 17);printf(%d\n, ret1);printf(%d\n, ret2);return 0; }分析一个整型占4个字节比较前16个字节就是比较前4个元素前4个元素都是一样的所以返回0。但从17个字节开始arr1和arr2数组就开始不同了arr1是05而arr2是0808大于05所以返回-1。
http://www.zqtcl.cn/news/709328/

相关文章:

  • 20m带宽做网站够用吗win7创建wordpress
  • qq音乐怎么做mp3下载网站发卡网站建设方案
  • 做cpc不做网站可以吗网站跳出率
  • 公司网站变更域名有了域名就可以做网站了吗
  • 网站建设推广营销策划做外贸网站需要注册公司吗
  • 可信赖的赣州网站建设做羽毛球网站
  • 如何找网站做推广wordpress登录及注册
  • 韩国美容网站 模板wordpress中英文
  • 为什么邮箱突然进不去了总提示正在进入不安全网站wordpress需注册访问
  • 建网站哪家最好山东泰安房价
  • wordpress4.9+多站点网络推广公司联系昔年下拉
  • 西安seo网站关键词优化罗田县建设局网站
  • 北京网站建设 shwllnmp新手 wordpress
  • 优化网站结构一般包括如何进行网络营销风险控制
  • 怎样查看网站是用什么做的郫都区规划建设局网站
  • 新乡营销型网站建设制作网站设计的总结
  • 做网站的免费空间微信crm管理系统
  • 网站开发方向 英语翻译护肤品网页设计图片
  • 南昌做兼职的网站佛山网站建设公司排名
  • 购物网站建设推进表国外设计素材网站
  • 广州网站建设推广公司有哪些有一个网站专门做民宿
  • 安徽省建设干部网站淘客网站超级搜怎么做
  • 网站地图提交地址网站地图可以自己做么
  • 电子商务网站建设与推广wordpress手机大标题
  • 网站页面上的下载功能怎么做ps扩展插件网站
  • 打开网站出现directory今天时政新闻热点是什么
  • 高校校园网站建设与运行网站规划教学设计
  • 包头手机网站制作seo推广手段
  • 汕头网站推广seo品牌网站建设 app建设
  • 网站后台word编辑器如何申请一个网站 做视频