读书人

怎么用memset()对整数型的数组初始化

发布时间: 2012-03-02 14:40:29 作者: rapoo

如何用memset()对整数型的数组初始化?
#include <stdio.h>
#include <string.h>

int main()
{
int a[5];

int i;

memset(a,1,5*sizeof(int));

for(i = 0;i < 5;i++)
{
printf( "%d\n ",a[i]);
}

getch();
}


这种明显不可以,memset是按照字节初始化的,可我想对整数初始化,咋整?

[解决办法]
哦,你想弄成4个1啊?
那除了自己写循环,C里可能没有办法了。C++中可以使用std::fill。
[解决办法]
不过既使是std::fill,也只不是是别人写好的库函数而已,其底层实现最终很可能仍然是靠for循环来实现的,所以其区别也仅有两点:(1)代码的风格,(2)谁实现(自己实现还是库作者实现)。
不像memset,可能从汇编级作过优化。
[解决办法]
for(i = 0;i < 5;i++)
{
a[i] = 1;
}

[解决办法]
不过,如果你的数组的长度不长,而且编译时就能确定大小,也完全可以这样初始化:

int a[5] = {1, 1, 1, 1, 1};
[解决办法]
定义一个memset32
#define memset32(dst,val,count)\
__asm mov edi,dword ptr[dst]\
__asm mov eax,dword ptr[val]\
__asm mov ecx,dword ptr[count]\
__asm rep stosd

读书人网 >C语言

热点推荐