memset用法
来源:互联网 发布:知道软件 编辑:程序博客网 时间:2024/06/05 08:56
memset用法
首先如果是一个int a[10]的数组,只可以对它进行两种操作:
memset(a,0,sizeof(a))操作可以得到a的全0数组.
memset(a,-1,sizeof(a))操作可以得到a的全-1数组.
如果要置a为其他置的话就会出现不可预测的值.
这个原因很好解释:
因为memset操作是对字符进行操作的,且计算机中保存带符号数都是按补码保存的.
当我们置a[i](int)为0时,我们其实是对a的内存空间的每个直接都置0,所以正确.
当我们置a[i](int)为-1时,我们其实是对a的内存空间置11111111(-1的补码),不论是8个1还是32个1,它们都表示的是-1,所以可以置为-1.
如果是char a[10]数组的话,可以置a[i]的值为:
[-128,127]中的任意整数.
如果置其他的数就会出现不可预测的值.
如果是unsigned char a[10],那么可以置值的范围是:
[0,255].
这个原理和上面是一样的,对于我们设置值的时候直接把对应值转化为其补码,然后对每个内存字节操作.
在操作完了之后,内存字节已经按照我们的要求改变了,但是当我们要读数据的时候,我们会把内存中的内容翻译成我们本来定义的类型,所以这时候可能会出现不一致的现象.
比如unsigned char a[10] 数组,执行memset(a,-1,sizeof(a));后
内存a数组的每个字节都是11111111,但是当我们读取a[i]的时候读到了11111111,编译器再把11111111转化为unsigned char 就会返回255这个值给我们.
以上内容属于本人猜测,如有错误,希望大家指正我哦.
- memset用法
- memset 用法
- memset用法
- memset用法
- memset用法
- memset 用法
- memset用法
- memset用法
- memset 用法
- memset 用法
- memset用法
- memset用法
- memset 用法
- memset用法
- memset用法
- memset用法
- memset用法
- memset用法
- 内核模块的自动加载和Ubuntu-Linux的开机流程
- 大津法---OTSU算法
- MongoDB:MongoDB导入导出
- 自己最近总结了下关于VI的一些基本用法
- java try、catch、finally及finally执行顺序详解
- memset用法
- Android官方提供的支持不同屏幕大小的全部方法
- USACO Section 5.3 Network of Schools
- csdn第一次写点东西
- hdu1071(积分求直线和抛物线构成的面积)
- ubuntu 12.04.4 下改变软件源
- 列举游戏开发过程中的一些不良现象
- 常见验证码的弱点与验证码识别
- Ubuntu下Codeblocks+wxWidgets编程,学生公寓管理系统,基于窗体(使用wxFormbuilder拉取控件)。C++,sqlite3