首页 > 其他分享 >为什么memcpy中要指定const void *

为什么memcpy中要指定const void *

时间:2022-11-29 09:34:16浏览次数:45  
标签:中要 void copyBytes char const memcpy howMany

void copyBytes(char *x, char *y, int howMany)

首先是你的指针char *,这意味着除了char *需要显式转换之外的任何指针类型.您应该使用void *,隐式转换指针类型.

uint16_t a, b;

copyBytes(&a, &b, sizeof(a));  // &a and &b are uint16_t*, not char*.

第二,来源,y不是const,这意味着如果您通过const来源,您将收到警告.

char buf[512];
const char str[] = "Hello world";  // Contents of string are constant.
copyBytes(buf, str, sizeof(str));  // With your code, this produces a warning.

第三,howMany签名,意味着您可以传递负值.

我会推荐这样的签名(顺便说一句,这非常相似memcpy):

void copyBytes(void *x, const void *y, size_t howMany)

第四个批评... libc memcpy可能会更好地进行优化,使用大于字节的单位,特定于平台的性能技巧(例如:内联汇编,x86上的SSE)等等.还有memmove更好的指定行为.缓冲区重叠.

总结:为了学习的目的,自己编写这些例程是很好的,但是通常你会更好地使用C库.

标签:中要,void,copyBytes,char,const,memcpy,howMany
From: https://www.cnblogs.com/amxiang/p/16934460.html

相关文章

  • Xcode编译错误__NSCFConstantString
    __NSCFConstantString:主要错误就是数据类型造成的,然后就是检查哪个地方造成的数据类型调用错误错误一:'-[__NSCFConstantString_imageThatSuppressesAccessibilityHairlineT......
  • 单片机中简单的时延程序void Delay(__IO uint32_t nCount)
    这个延时函数没有返回值,函数类型是void型,,函数名称是Delay,同时函数的参数部分中的_IO是类型修饰符,指的是单片机的静态IO口;u32是数据类型,是指32位的无符号整形变量。,......
  • readonly和const比较
    readonly和const比较前天犯了个低级错误,是关于readonly的,总结了一下:C#的readonly关键字只能在字段上面使用publicreadonlyTcpClientclient;不能在类,方法,属性上......
  • ES6笔记 - let和const命令
    let和const命令目录let和const命令1.let命令2.const命令3.块级作用域4.从function循环问题深入了解let1.let命令let命令的用法和var类似,其核心特点为只在let所在......
  • 【iOS-cocos2d-X 游戏开发之十一】New CCSprite()带来的错误&使用CCUserDefault及pvr.
    本站文章均为​​ 李华明Himi ​​​原创,转载务必在明显处注明本章讲解的是几个细节问题,但是此细节有可能导致一系列问题,那么今天Himi与童鞋们共同交流分享下;一.  对......
  • cpp constexpr 类名推断(gcc需要7.3以上
    #include<iostream>#include<string_view>template<typenameT>structTypeName{constexprstaticstd::string_viewfullname_intern(){#ifdef......
  • C# 中的 const 和 readonly 有什么区别?
    问题constC#和C#之间有什么区别readonly?你什么时候会用一个而不是另一个?除了明显的区别必须在定义constVSreadonly值时声明值可以动态计算,但需要在构造函数退出之前分......
  • Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
    在重写android中View类的onDraw方法画图的时候,protectedvoidonDraw(Canvascanvas)报错如下:一开始还以为是模拟器的问题,结果发现://改变风格,绘制字体paint.setTex......
  • javascript:void() 和 herf="#" 区别
    javascript:void(0)和herf="#"区别本文内容参考菜鸟教程(大部分都是原文内容)原文地址javascript:void(0)的含义我们经常会使用到javascript:void(0)这样的代码......
  • c语音全局变量与静态全局变量和静态局部变量代码区常量const
    1全局变量可以跨文件使用2、全局变量可以多次声明,但是定义值只能定义一次。3、静态全局变量只能限定本文件使用。4、局部静态变量只能再局部代码块里面才能访问。5、局......