如何用memset()对整数型的数组初始化?

lockhall 2007-02-04 01:15:16
#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是按照字节初始化的,可我想对整数初始化,咋整?
...全文
703 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yexiaobiao2010 2010-05-04
  • 打赏
  • 举报
回复
如果改成定义字符数组就可以,具体代码如下:
#include <stdio.h>
#include <string.h>

int main()
{
char a[5];
int i;
memset(a,1,sizeof(a));
for(i=0; i<5; i++)
{
printf( "%d\n ",a[i]);
}
}
vcacm 2007-02-04
  • 打赏
  • 举报
回复
用位运算中的位段去实现呀!
GoAndSeek 2007-02-04
  • 打赏
  • 举报
回复
定义一个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
晨星 2007-02-04
  • 打赏
  • 举报
回复
哦,还有个限制:编译时能知道这个初始值(即你这里的“1”)。
晨星 2007-02-04
  • 打赏
  • 举报
回复
不过,如果你的数组的长度不长,而且编译时就能确定大小,也完全可以这样初始化:

int a[5] = {1, 1, 1, 1, 1};
lockhall 2007-02-04
  • 打赏
  • 举报
回复
看来走memset这条路不好使啊
blh 2007-02-04
  • 打赏
  • 举报
回复
for(i = 0;i < 5;i++)
{
a[i] = 1;
}
Estfania 2007-02-04
  • 打赏
  • 举报
回复
同意楼上
晨星 2007-02-04
  • 打赏
  • 举报
回复
不过既使是std::fill,也只不是是别人写好的库函数而已,其底层实现最终很可能仍然是靠for循环来实现的,所以其区别也仅有两点:(1)代码的风格,(2)谁实现(自己实现还是库作者实现)。
不像memset,可能从汇编级作过优化。
晨星 2007-02-04
  • 打赏
  • 举报
回复
哦,你想弄成4个1啊?
那除了自己写循环,C里可能没有办法了。C++中可以使用std::fill。
晨星 2007-02-04
  • 打赏
  • 举报
回复
没啥不可以,一般整数的0正好就是四个字节的0。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧