一些注意的小点,part 1
2013-12-01 11:11
169 查看
如下demo是可以的,能把数组中的元素值都设置成字符1,
而,如下程序想把数组中的元素值设置成1,却是不可行的
问题是:
1,第一个程序为什么可以,而第二个不行?
因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用 memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。
2,不想要用for,或是while循环来初始化int a[5];能做到吗?(有没有一个像memset()这样的函数初始化)
如果用memset(a,1,20);(实际上与memset(a,1,5*sizeof(int))结果是一样的)就是对a指向的内存的20个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是0x01010101,就等于16843009,就完成了对一个INT元素的赋值了。
由此可以看出,memeset用于大数组的迅速清零是很好用的,但是,对于非字符数组的赋值,是不靠谱的。
1,第一个程序为什么可以,而第二个不行?
因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用 memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。
2,不想要用for,或是while循环来初始化int a[5];能做到吗?(有没有一个像memset()这样的函数初始化)
如果用memset(a,1,20);(实际上与memset(a,1,5*sizeof(int))结果是一样的)就是对a指向的内存的20个字节进行赋值,每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是0x01010101,就等于16843009,就完成了对一个INT元素的赋值了。
由此可以看出,memeset用于大数组的迅速清零是很好用的,但是,对于非字符数组的赋值,是不靠谱的。
相关文章推荐
- DOS命令大全!
- (Relax ST1.3)POJ 1045 Bode Plot
- Regression(1)------The difference between classification and regression
- BTree
- Android开发学习之闹钟功能的简单实现
- shell $'somestring'
- Algorithm Design——求多边形面积
- 第五章上 首次登陆
- 抓住“汇报”的机会
- 阻止copying行为
- linux-mint下搭建android,angularjs,rails,html5开发环境 - qijie29896的个人空间 - 开源中国社区
- Algorithm Design——求两条线段的交点
- 一个专业的Winfrom下的ribbon
- 啊啊
- SQL 语句中的union操作符
- 悲伤时唱首歌:《暗恋桃花源》剧评
- sprintf函数的用法
- Cookie 获取访问时间
- 图像处理、计算机图形学、计算机视觉和模式识别领域的区别和联系
- ICETEK-OMAPL138-KB自带程序测试问题