memset函数、0x3f、INF、memcpy

阅读: 评论:0

memset函数、0x3f、INF、memcpy

memset函数、0x3f、INF、memcpy

定义:

例子:

初始化为1的后果:

初始化为-1的正确示范 

0x3f

INF

定义:

memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。

 其原型是:void* memset(void *_Dst, int  _Val, size_t _Size)

_Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数

例子:

我们用memset给str初始化为“000000000”,用法如下

       char str[9];

       memset(str,'0',9); 

      for(int i=0;i<9;i++) cout<<str[i];

注意,memset是逐字节 拷贝的。

我们用memset给str初始化为{1,1,1,1,1,1,1,1},

       int num[8];      

       memset(num,1,8);//这样是不对的

     一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。

因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1

1的二进制是(00000000 00000000 00000000 00000001),取后8位(00000001),int型占4个字节,当初始化为1时,它把一个int的每个字节都设置为1,也就是0x01010101,二进制是00000001 00000001 00000001 00000001,十进制就是16843009。

之所以输入0,-1时正确,纯属巧合。

0,二进制是(00000000 00000000 00000000 00000000),取后8位(00000000),初始化后00000000 00000000 00000000 00000000结果是0
-1,负数在计算机中以补码存储,二进制是(11111111 11111111 11111111 11111111),取后8位(11111111),则是11111111 11111111 11111111 11111111结果也是-1

初始化为1的后果:

初始化为-1的正确示范 

 所以,在memset使用时要千万小心,在给char以外的数组赋值时,只能初始化为0或者-1。

#include <memory.h> 
#include <stdio.h> void main( void )  
{  char buffer[] = "This is a test of the memset function";  printf( "Before: %sn", buffer ); memset( buffer, '*', 4 ); printf( "After: %sn", buffer ); }  
输出:  
Before: This is a test of the memset function  
After: **** is a test of the memset function 

0x3f

如果我们想要将某个数组清零,我们通常会使用memset(a,0,sizeof(a)),方便又高效,但是当我们想将某个数组全部赋值为无穷大时,就不能使用memset函数而得自己写循环了,因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0(一般我们只有赋值为-1和0的时候才使用它)。现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。

INF

#define INF 0x3f3f3f3f 

memcpy

memcpy函数是C/C++语言中的一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)。其原型是:

void *memcpy(void *destin, void *source, unsigned n);

作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。
函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。

本文发布于:2024-01-28 11:15:32,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064117407032.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   memset   x3f   memcpy   INF
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23