利用memset实现(除-1、0)数组的初始化的问题
2013-12-10 20:52
274 查看
今天在调试程序的过程中,需要对一个数组进行初始化操作,而初始化的值并不是0(00000000)和-1(11111111)。平时,我们想对指针和数组进行初始化,首先想到的就是使用memset。今天我也不例外,使用memset进行初始化,发现打印出来的结果并不是我们初始化的值。
在网上查询了一下,才知道memset是按字节进行填充的,只能一个一个的字节进行赋值;而int型是占4个字节的,所以使用memset进行赋值时,会将int型的4个字节赋值成0x01010101,因此打印出来的结果就是一大串数字(十进制的数字)。
下面来看一下实际中用到的代码:
打印结果为: array[0]: 16843009 (0x01010101)
要想正确的赋值一个数组(非0和-1),最好是使用for循环进行初始化:
在网上查询了一下,才知道memset是按字节进行填充的,只能一个一个的字节进行赋值;而int型是占4个字节的,所以使用memset进行赋值时,会将int型的4个字节赋值成0x01010101,因此打印出来的结果就是一大串数字(十进制的数字)。
下面来看一下实际中用到的代码:
int array[5]; memset(array, 1, sizeof(int) * 5); printf("array[0]: %d", array[0]);
打印结果为: array[0]: 16843009 (0x01010101)
要想正确的赋值一个数组(非0和-1),最好是使用for循环进行初始化:
int d[5]; for (i=0; i<5; i++) { d[i]=1; }
相关文章推荐
- 二叉树(一)利用数组初始化二叉树,并实现前序中序后序遍历
- 问题:利用输入输出流重载实现一个整数数组的输入和输出。 要求:输入一个数组大小 及 所有元素的值,排序后输出该数组的所有元素。
- 利用 stringstream 和 getline 实现仅通过一次键盘录入初始化整个数组
- C语言创建一个数组,利用函数调用实现数组的初始化,逆置和清零
- Q14 密码问题 字符数组初始化memset
- memset初始化数组的问题
- 约瑟夫问题 算法很简单保证每个人都能看懂用的是模拟现实 用数组实现 利用循环删除数组中的元素
- 第 1 章 第 9 题 使用未初始化数组问题 设立辅助数组实现
- C语言中利用#define和#undef定义初始化数组,实现不同的初始化效果
- # 利用es6的新特性巧妙实现JavaScript中的数组求最大值问题
- 利用STL实现数组列表初始化
- java 利用数组实现循环队列
- 最大子数组问题-c++代码实现及运行实例结果
- 通过函数来实现数组的逆置以及数组的初始化,并能够打印出来
- 字符数组中关于strlen的问题(未初始化)
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- 最大子数组问题(三种方式,java实现)
- 约瑟夫环问题(c语言数组实现)
- Java对象数组初始化与NullPointerException问题
- 课程设计——利用信号量实现生产者-消费者问题(java)