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

保利拍卖公司网站网站框架模板

保利拍卖公司网站,网站框架模板,gta5买办公室 网站正在建设,软文发布平台#x1f680;write in front#x1f680; #x1f50e;大家好#xff0c;我是gugugu。希望你看完之后#xff0c;能对你有所帮助#xff0c;不足请指正#xff01;共同学习交流#x1f50e; #x1f194;本文由 gugugu 原创 CSDN首发#x1f412; 如需转载还请通知⚠… write in front 大家好我是gugugu。希望你看完之后能对你有所帮助不足请指正共同学习交流 本文由 gugugu 原创 CSDN首发 如需转载还请通知⚠ 个人主页gugugu—精品博客 欢迎各位→点赞 收藏⭐️ 留言​ 系列专栏gugugu的精品博客 ✉️我们并非登上我们所选择的舞台演出并非我们所选择的剧本 vs 启动 前言 上一篇博客里讲到了字符函数和字符串函数那么在这一篇博客中我们将另一种常见的函数讲解一下就是内存函数内存函数比字符函数和字符串函数更加的广泛毕竟是针对内存的函数。 一、内存函数与字符串函数的区别 C语言内存函数是针对内存块的不在乎内存中的数据但是字符串函数时针对字符串的在乎内存中的数据只操作字符串与\0操作符关系密切。 二、memcpy函数 memcpy函数与strcpy函数功能比较相似都是进行拷贝操作但是memcpy针对的对象不同。 1、memcpy函数的基本结构 void* memcpy(void * destination const void * sourcesize_t num); 函数有三个参数分别为起始地址目标地址和移动的字节的大小返回值是void* 那么为什么起始地址和目标地址以及返回值都是void类型呢 因为memcpy函数针对的对象是内存空间而内存空间中储存的数据类型不清楚有多种可能性所以直接使用void*类型的指针在使用时进行强制类型转换。 另外在这里补充一点 在上一篇文章里面很多字符串函数的返回值都是一个指针这是为什么呢 其实这是为了能够通过返回值去更方便的进行链式访问 2、memcpy函数的模拟实现 在模拟实现memcpy这些内存函数的时候主要是要注意对void*的强转这比较巧妙。 这里提供两种方法。大同小异 方法一 #include stdio.h #include assert.hvoid* my_memcpy(void* ch1, const void* ch2, size_t num) {assert(ch1 ch2);void* ret ch1;int i 0;for (i 0; i num; i){*((char*)ch1) *((char*)ch2);}return ret; }int main() {int arr1[10] { 0 };int arr2[] { 1,2,3,4,5,6,7,8 }; void * ret1my_memcpy(arr1, arr2, 20);int i 0;for (i 0; i 10; i){printf(%d , *(((int*)ret1)));}printf(\n);char ch1[] ZZZZZZZZZZZ;char ch2[] YYYYYYYYY;void * ret2my_memcpy(ch1, ch2, 6);printf(%s\n, (char *)ret2);return 0; }方法二 #include stdio.h #include assert.hvoid* my_memcpy(void* ch1, const void* ch2, size_t num) {assert(ch1 ch2);void* ret ch1;while (num--){*(char*)ch1 *(char*)ch2;ch1 (char*)ch1 1;ch2 (char*)ch2 1;}return ret; }int main() {int arr1[10] { 0 };int arr2[] { 1,2,3,4,5,6,7,8 }; void * ret1my_memcpy(arr1, arr2, 20);int i 0;for (i 0; i 10; i){printf(%d , *(((int*)ret1)));}printf(\n);char ch1[] ZZZZZZZZZZZ;char ch2[] YYYYYYYYY;void * ret2my_memcpy(ch1, ch2, 6);printf(%s\n, (char *)ret2);return 0; }memcpy函数针对的对象是内存空间所以对整形和字符都可以处理 三、memmove函数 1、memmove函数的优势 memcpy函数在使用时会存在问题比如目标空间和起始空间发生了重叠此时使用memcpy函数就会出现问题。 看下面的例子 #include stdio.h #include assert.hvoid* my_memcpy(void* ch1, const void* ch2, size_t num) {assert(ch1 ch2);void* ret ch1;while (num--){*(char*)ch1 *(char*)ch2;ch1 (char*)ch1 1;ch2 (char*)ch2 1;}return ret; }int main() {int arr[10] { 1,2,3,4,5,6,7 };my_memcpy(arr 2, arr, 20);int i 0;for (i 0; i 10; i){printf(%d , arr[i]);}return 0; }按照设想答案应该是 1 2 1 2 3 4 5 0 0 0 但是实际答案是 是不是没想到 这是为什么呢 主要是在实现的时候读取到第三个数的时候本来是3但是被赋值之后就变成了1所以第三个数也就成了1而不是三后面也是一样。 但是memmove函数可以解决这个问题 2、memmove函数的模拟实现 像上面实现memcpy一样从前面向后面拷贝出现了问题那么如果从后面往前面拷贝又当如何 这是就会先将5放到arr[6]上4放到arr[5]上依次类推可以发现不会出现问题。 但是又有新的问题如果是memmove(arr,arr2,20)这又会怎么办呢 这是从后往前就不行了就得从前往后拷贝。 聪明的小伙伴看到这里肯定能够想出解决方案。 当目的地址比起始地址大时从后往前拷贝当目的地址比起始地址小时从前往后拷贝 上代码 #include stdio.h #include assert.h void* my_memmove(void* ch1, const void* ch2, size_t num) {assert(ch1 ch2);void* ret ch1;if (ch1 ch2){while (num--)//自减操作后num已经是19了{*((char*)ch1 num) *((char*)ch2 num);//每次自减操作后num都会少1向前走了一个字节}}else{while (num--){*(char*)ch1 *(char*)ch2;ch1 (char*)ch1 1;ch2 (char*)ch2 1;}}return ret; }int main() {int arr1[10] { 0 };int arr2[10] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr2, arr22, 20);int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0; }四、memset函数 这个函数比较简单就不详细讲解了 1、memset函数的功能 set的意思是设置我们在这里把它理解成赋值就是给内存去赋值 先写段代码看看功能吧 #include stdio.hint main() {char ch[20] hello world!;memset(ch, x, 10);printf(%s\n, ch);return 0; }需要注意的是 memset函数的结构比较特殊 void * memset(void* ptr,int value,size_t num); 第二个参数是int类型为啥我的例子里面给的是char呢 是因为char是使用ASCII码值进行操作的。 2、memset函数的模拟实现 比较简单直接上代码 #include stdio.h #include assert.h void* my_memset(void* ch, int value ,size_t num) {assert(ch);void* ret ch;while (num--){*(char*)ch value;ch (char*)ch 1;}return ret;} int main() {char ch[20] hello world!;my_memset(ch, x, 10);printf(%s\n, ch);return 0; }运行成功yeah 五、memcmp函数 这个函数也比较简单就是对内存进行比较 1、memcmp函数的基本结构 int memcmp(const void * ptr1,const void* ptr2,size_t num); 返回值是int 跟strcmp一样两个指针参数都加上了const 无法修改内容num是比较的字节数 2、memcmp函数的模拟实现 比较简单直接上代码 #include stdio.h #include assert.h int my_memcmp(const void* ptr1, const void* ptr2, size_t num) {assert(ptr1 ptr2);while (num--){if (*(char*)ptr1 *(char*)ptr2){ptr1 (char*)ptr1 1;ptr2 (char*)ptr2 1;}elsereturn *(char*)ptr1 - *(char*)ptr2;}return 0; } int main() {char ch1[20] { 0 };char ch2[20] { 0 };gets(ch1);gets(ch2);int num 0;scanf(%d, num);int ret my_memcmp(ch1, ch2, 5);if (ret 0)printf(\n);else if (ret 0)printf(\n);elseprintf(\n);return 0; }ok ,这次的分享到这里就结束了函数的内容基本上就要告一段落了 今天下午还会有一更哦敬请关注 求关注 蹲个一键三连
http://www.pierceye.com/news/189345/

相关文章:

  • 视频直播网站开发运营步骤十大免费erp软件
  • 域名备案和网站备案有什么不同wap 网站
  • 没备案的网站百度收录博客营销
  • 网站开发新技术wordpress 搜索词调用
  • 凡科手机建站教程wordpress 搜索引擎
  • asp企业网站源码下载免费ppt模板公众号
  • 西斗门的网站建设短网址生成器有哪些
  • 一站式织梦网站模板工信部备案查询网官网
  • 网站导航做外链桂林seo
  • 青岛网站建设q479185700棒软件开发者是指
  • 福永公司网站建设空间网站链接怎么做
  • 百度的企业网站谷歌浏览器下载安卓版
  • 网站建设总体情况网站设计宁波
  • 西宁做网站_君博示范360建筑网会员
  • 做DJ网站违法吗汕头seo网站推广
  • 上海网站建设网站宁波网站模板哪家性价比高
  • 珠海专业做网站制作做网站网站的代理算网站罪吗
  • 建设局网站简介通信建设网站
  • php做网站用什么开发工具大专软件技术工资一般多少
  • 网站建设服务承诺wordpress 博客园
  • seo综合查询站长工具关键词全网营销案例
  • 深圳专业做网站设计政务服务网站建设性建议
  • 做暧免费观看网站哪个网站可以给图片做链接
  • wordpress最好的主题东莞债务优化
  • 全国网站建设大赛网店网站设计
  • 学网站建设需要学多久wordpress火车头插件
  • wordpress 网站实例中国纪检监察报app下载
  • 网站链接dw怎么做营销推广方法
  • 觅知网 大而全的高质量素材站开发手机网站用什么好
  • 建设一个广告联盟的网站医院网站设计与实现