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

手机网站定制 杭州wordpress仿人人网

手机网站定制 杭州,wordpress仿人人网,wordpress提交文章,网站 用户粘度C语言程序设计笔记---019 C语言进阶之内存函数1、memcpy函数1.1、模拟实现memcpy 2、memmove函数2.1、模拟实现memmove函数 3、memset函数4、memcmp函数5、结语 C语言进阶之内存函数 前言#xff1a; 通过C语言进阶前篇的字符串函数的知识#xff0c;继续C语言的内存函数学习… C语言程序设计笔记---019 C语言进阶之内存函数1、memcpy函数1.1、模拟实现memcpy 2、memmove函数2.1、模拟实现memmove函数 3、memset函数4、memcmp函数5、结语 C语言进阶之内存函数 前言 通过C语言进阶前篇的字符串函数的知识继续C语言的内存函数学习。 /知识点汇总/ 内存相关的函数 1.memcpy – strcpy —仅仅是操作字符串进行拷贝而memcpy内存中的数据不仅仅是操作字符 2.memmove 3.memset 4.memcmp — strcmp 1、memcpy函数 原型void *memcpy( void *dest, const void src, size_t count ); ---- void 说明兼容任意类型 头文件string.h 功能将源头内存的数据。拷贝到目标内存中 注意与strncpy不同的是参数num和count。一个是指需要拷贝的元素个数一个是指需要拷贝的元素字节大小 #include stdio.h #include string.h int main() {int arr1[10] { 0 };int arr2[] { 1,2,3,4,5 };memcpy(arr1, arr2, 20);//20 4*5int sz sizeof(arr1) / sizeof(arr1[0]);for (int i 0; i sz; i){printf(%d , arr1[i]);}return 0; }1.1、模拟实现memcpy #include stdio.h #include string.h #include assert.h//注意void* 不能进行运算操作 //另外这里必须使用(char*)进行操作因为如果是其它类型就会造成数据上的丢失等问题 --- 联想类似于qsort一个个字节进行操作 void* my_memcpy(void* dest, const void* src, size_t sz)//sz拷贝多少个字节 {assert(dest src);while (sz--)//以一个字节一个字节的拷贝{*(char*)dest *(char*)src;dest (char*)dest 1;//注意强制类型转换具备临时属性所以需要(char*)dest1来赋值保存数据不能用destsrc (char*)src 1;} }int main() {int arr1[10] { 0 };int arr2[] { 1,2,3,4,5 };my_memcpy(arr1, arr2, 20);//20 4*5for (int i 0; i 5; i){printf(%d , arr1[i]);}return 0; }扩展memcpy对同一内存空间的操作问题 #include stdio.h #include string.h #include assert.h//注意void* 不能进行运算操作 //另外这里必须使用(char*)进行操作因为如果是其它类型就会造成数据上的丢失等问题 --- 联想类似于qsort一个个字节进行操作 void* my_memcpy(void* dest, const void* src, size_t sz)//sz拷贝多少个字节 {assert(dest src);void* ret dest;while (sz--)//以一个字节一个字节的拷贝{*(char*)dest *(char*)src;dest (char*)dest 1;//注意强制类型转换具备临时属性所以需要(char*)dest1来赋值保存数据不能用destsrc (char*)src 1;}return ret; }int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };//my_memcpy(arr2, arr, 20);//20 4*5//模拟的memcpy达不到预期的要求memcpy(arr 2, arr, 20);//发现库函数的memcpy可以实现要求for (int i 0; i 5; i){printf(%d , arr[i]);}return 0; }小结 1.memcpy只能对不同空间内存之间的数据进行操作 即不重叠内存的拷贝可以使用memcpy而重叠的内存空间则需要用memmove函数 2.库函数可以实现标准规定 以memcpy来实现不重叠的内存的拷贝且要求能达到60即可以memmobe来实现重叠内存的拷贝 3.但是发现当前的编译环境下memcpy同样能实现重叠内存的拷贝远远满足60分的要求100分 所以于编译环境相关建议相应的功能交给适合的函数实现即可。 2、memmove函数 原型void *memmove( void *dest, const void src, size_t count ); ---- void 说明兼容任意类型 头文件string.h 功能将源头内存的数据。拷贝到目标内存中且与memcpy相比可以拷贝同一空间的数据 #include stdio.h #include string.hint main() {//int arr1[10] { 0 };//int arr2[] { 1,2,3,4,5 };//memmove(arr1, arr2, 20);//20 4*5//int sz sizeof(arr1) / sizeof(arr1[0]);//for (int i 0; i sz; i)//{// printf(%d , arr1[i]);//}int arr[] { 1,2,3,4,5,6,7,8,9,10};memcpy(arr2, arr, 20);//20 4*5int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i sz; i){printf(%d , arr[i]);}return 0; }2.1、模拟实现memmove函数 #include stdio.h #include assert.hvoid* my_memmove(void* dest, const void* src, size_t sz) {assert(dest src);char* ret (char*)dest;if (dest src)//从前向后拷贝{while (sz--){*((char*)dest) *((char*)src);dest (char*)dest 1;src (char*)src 1;}}else//从后向前拷贝{while (sz--)//sz-- 先用再减即先判断sz20为真用完后减1进入循环此时sz19{*((char*)dest sz) *((char*)src sz);}}return ret; }int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr 2, arr, 20);//20 4*5//my_memmove(arr, arr 2, 20);//20 4*5//my_memmove(arr, arr 5, 20);//20 4*5int sz sizeof(arr) / sizeof(arr[0]);for (int i 0; i sz; i){printf(%d , arr[i]);}return 0; }3、memset函数 原型void *memset( void *dest, int c, size_t count ); 头文件string.h 功能是设置内存的并且以字节为单位设置的 #include stdio.h #include string.hint main() {char arr[] hello world;memset(arr6, H, 4);printf(%s\n, arr);return 0; }建议以字节为单位设置的所以更合适字符但是设置为0可以是任意类型 4、memcmp函数 原型int memcmp( const void *buf1, const void *buf2, size_t count ); 头文件string.h 功能是比较两个内存块并且是以字节为单位的方式进行比较的 返回值 *buf1 *buf2 — 返回0的值 *buf1 *buf2 — 返回0的值 *buf1 *buf2 — 返回0的值 #include stdio.h #include string.hint main() {//int arr1[] { 1,2,3,4,5,6,7 };01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00//int arr2[] { 1,2,3,7 };01 00 00 00 02 00 00 00 03 00 00 00 07 00 00 00//int ret memcmp(arr1, arr2, 12);//精确到字节比较//printf(%d\n, ret);//0 --- 前12位相同//int arr1[] { 1,2,3,4,5,6,7 };01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00//int arr2[] { 1,2,3,7 };01 00 00 00 02 00 00 00 03 00 00 00 07 00 00 00//int ret memcmp(arr1, arr2, 13);//精确到字节比较//printf(%d\n, ret);//-1 ---第十三位 04 07int arr1[] { 1,2,3,4,5,6,7 };//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00int arr2[] { 1,2,3,0x11223304 };//01 00 00 00 02 00 00 00 03 00 00 00 04 33 22 11int ret memcmp(arr1, arr2, 13);//精确到字节比较 --- 前13位相同 0//int ret memcmp(arr1, arr2, 14);//精确到字节比较 --- 第14位 00 33 --- -1printf(%d\n, ret);return 0; }5、结语 熟悉各个函数的使用有利于程序的可读性和效率此篇笔记有误的地方请多多指教。 半亩方糖一鉴开天光云影共徘徊。 问渠哪得清如许?为有源头活水来。–朱熹观书有感
http://www.zqtcl.cn/news/131107/

相关文章:

  • 网站 平均加载时间百度搜索竞价推广
  • 赛车网站开发淄博网站建设及托管
  • 过时的网站湖州公司网站建设
  • 环球设计网站网站建设的面试要求
  • 百度公司网站排名怎么做潮阳网站开发
  • 杨和网站建设国内外建筑设计网站
  • 北京知名网站建设公司wordpress4.0.x 下载
  • 锡盟网站建设做网站视频存储
  • 深圳博纳网站建设高端品牌护肤品排行榜
  • 百度爱采购优化排名软件宁波seo搜索平台推广专业
  • 门户网站的建设公司台山网站定制
  • 建设公司网站需要什么群辉nas怎么做网站
  • 广西自治区集约化网站建设要求坂田网站的建设
  • 网站后台不能编辑企业如何申请网站
  • 网站建设网站设计多少钱网站系统开发方式
  • 站长收录wordpress配置好后别人无法访问
  • 我国档案网站建设吉林网站建设制作
  • 手机网站底部导航网站视频链接怎么做
  • 企业门户网站属于什么层seo关键词排行优化教程
  • wordpress 演示站广东省南粤交通投资建设有限公司网站
  • 典型的企业网站张家港保税区建设规划局网站
  • 网站设计公司那个好网页设计登录界面模板
  • 做网站的厂家聚美优品网站设计
  • 哈尔滨网站建设效果好网站改版 影响google 404跳首页
  • 廊坊网站推广的公司如何做1个手机网站
  • 网站index.php被修改南京cms建站系统
  • 淘宝网站模板是什么做的北海建设厅网站
  • 我想建个网站想做电商应该怎么入门
  • 广州番禺网站制作推广网站建设徐州百度网络网站
  • 有没有个人做网站的新网站做seo 的效果