首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

memset初始化数组变量,该怎么处理

2012-09-25 
memset初始化数组变量int d[5]进行初始化时:使用memset(d,0,sizeof(d))与使用:for (i0 i5 i++) {d[i

memset初始化数组变量
int d[5];进行初始化时:
使用memset(d,0,sizeof(d));与使用:
for (i=0; i<5; i++) {
d[i]=0;
}
有何不同么?谢谢!

[解决办法]
效果都一样 ,效率上吗,我觉得可能memset高一点,只是个人感觉,具体不太清楚。
[解决办法]
memset是按字节填充的 可以精确到字节
for只是一个赋值操作 每个int四个字节(32位) 是对整体的操作
[解决办法]
结果是一样的,memset效率大概要高些
[解决办法]

探讨
int d[5];进行初始化时:
使用memset(d,0,sizeof(d));与使用:
for (i=0; i<5; i++) {
d[i]=0;
}
有何不同么?谢谢!

[解决办法]
这就是结果:
C/C++ code
#include <stdio.h>#include <string.h>int main(int argc, char **argv){        int d[2];        memset(d,1,sizeof(d));        printf("%d\t%d\n", d[0], d[1]);        d[0]=1;        d[1]=1;        printf("%d\t%d\n", d[0], d[1]);        return 0;}[vince025@shell ~/tests]$ gcc -o memsetDemo memsetDemo.c[vince025@shell ~/tests]$ ./memsetDemo16843009        168430091       1[vince025@shell ~/tests]$
[解决办法]
探讨

int d[5];
memset(d,0,sizeof(d));

[解决办法]
有现成的就先用,看看标准c的memset是怎么实现的就能知道了,说不准它在私底下也是一个大循环一个单元一个单元置零呢
[解决办法]
memset效率好一些吧。
[解决办法]
探讨

引用:

这就是结果:
C/C++ code

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int d[2];
memset(d,1,sizeof(d));
printf("%d\t%d\n", d[0], d[1]);
d[0]=1;
……

[解决办法]
探讨
memset的第二个参数是int,memset(d,'1',sizeof(d));printf("%c\t%c\n", d[0], d[1]);才是你想要的结果。
引用:

这就是结果:
C/C++ code

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int d[2];
memset(d,1,sizeof(d));
printf("%d\t%d\n", d[0], d[1]);
d[0]=1;
……

[解决办法]
效率上没区别,memset也是使用循环来做
[解决办法]

测试了一下,两个使用时间相同的!
[解决办法]
怎么看时间啊?求教,本人初学c。。。
[解决办法]
memset是按字节来填充的,当填充int类型的数组时,效率是不如直接用for的
不过0是例外的,填充0的时候是调用memzero的
至于填充效率在一定的数量级以下没有什么意义

可以做个试验看看,用for和memset填充个几百兆的内存看看
[解决办法]
探讨
怎么看时间啊?求教,本人初学c。。。

[解决办法]
不明白你们对数组置0需要用for?

直接 int d[5] = {0};
memset一般对分配出来的内存或复杂的结构进行清0操作

对新人希望你们不仅解决问题,还需要提示一些什么
[解决办法]
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\memset.c


C/C++ code
/****memset.c - set a section of memory to all one byte**       Copyright (c) Microsoft Corporation. All rights reserved.**Purpose:*       contains the memset() routine********************************************************************************/#include <cruntime.h>#include <string.h>#pragma function(memset)/****char *memset(dst, val, count) - sets "count" bytes at "dst" to "val"**Purpose:*       Sets the first "count" bytes of the memory starting*       at "dst" to the character value "val".**Entry:*       void *dst - pointer to memory to fill with val*       int val   - value to put in dst bytes*       size_t count - number of bytes of dst to fill**Exit:*       returns dst, with filled bytes**Exceptions:********************************************************************************/void * __cdecl memset (        void *dst,        int val,        size_t count        ){        void *start = dst;#if defined (_M_IA64) || defined (_M_AMD64)        {        __declspec(dllimport)        void RtlFillMemory( void *, size_t count, char );        RtlFillMemory( dst, count, (char)val );        }#else  /* defined (_M_IA64) || defined (_M_AMD64) */        while (count--) {                *(char *)dst = (char)val;                dst = (char *)dst + 1;        }#endif  /* defined (_M_IA64) || defined (_M_AMD64) */        return(start);}
[解决办法]
探讨

不明白你们对数组置0需要用for?

直接 int d[5] = {0};
memset一般对分配出来的内存或复杂的结构进行清0操作

对新人希望你们不仅解决问题,还需要提示一些什么

热点排行