a1023182899
Ordinary programmer
2019-08-08 15:49
采纳率: 68.2%
浏览 1.6k

为什么要用memset初始化数组的值?为什么不用数组初始化为0?

#include<stdio.h>
int main(){
    int a[5]={0,1,2}; 
    printf("%d\n",a[4]);//初始化元素默认为0,即使没被定义 
    int b[5];//未初始化元素为随机
    printf("%d\n",b[4]);

    int c[100]={0};
   //等价与memset(c, 0, sizeof(int)*100);,而且写起来很快
   //那为什么在实际中,大家是用下面的
     int c[100];
     memset(c, 0, sizeof(int)*100);
} 

原因一:
int c[100]={0},只能初始化为0,memset可以初始化为0或-1

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • a15179069117
    哈夫曼树 2019-09-29 11:21
    已采纳
    两者速度一样,都是0.0000sec
    赋值为0,建议使用int c[100]={0};,不用写头文件<string.h>,而且写代码速度更快,只需要一行
    赋值为-1,只能使用memset(c, 0, sizeof(int)*100);
    
    #include<stdio.h>
    #include<time.h>
    int main(){
        // 利用初始={0}赋值为0 
        clock_t start,end;
        start = clock();
    
        int a[99999]={0};
        int b[99999]={0};
        int c[99999]={0};
        int d[99999]={0};
        int e[99999]={0};
    
        end = clock();
        printf("time=%f\n",(double)((end-start)/CLK_TCK));
    } 
    
    #include<stdio.h>
    #include<time.h>
    #include<string.h>
    int main(){
        //用初始memset赋值为0
        clock_t start,end;
        start = clock();
    
        int a[99999];memset(a, 0, sizeof(int)*99999);
        int b[99999];memset(b, 0, sizeof(int)*99999);
        int c[99999];memset(c, 0, sizeof(int)*99999);
        int d[99999];memset(d, 0, sizeof(int)*99999);
        int e[99999];memset(e, 0, sizeof(int)*99999);
    
        end = clock();
        printf("time=%f\n",(double)((end-start)/CLK_TCK));
    }
    
    
    点赞 评论
  • weixin_42375906
    Rotch 2019-08-08 15:59

    memset我记得是只能将数组所有元素赋值为极大值或极小值。
    比如int a[100]
    memset时就是:
    a[1] = 0000;
    a[2] = 0000;
    ...
    a[100] = 0000;

    memset(a, 1, sizeof(a));
    这样写的话,
    a[1] = 1111;
    a[2] = 1111;
    ...
    a[100] = 1111;
    是不对的。
    而一般情况下用memset的原因是它采用好像时二进制的计数方法,比直接赋值快。
    其实通常两种都可以,只是习惯而已

    点赞 评论
  • AlexanderKong
    AlexanderKong 2019-08-08 16:52
    void * memset(void *buf,int ch,size_t cnt);
    在一段内存块中填充给定值( ch 的值只有0和-1有效   vs2019亲测) 对于较大  的结构体和数组的清零  才有更好的效果  
    

    一般 都直接 用0赋值 因为 只要一行代码。 而且开辟的都是不大的内存。
    还有很多初始化的函数 哪种用的人多 那它一定就是最简洁的最好用的。

    点赞 评论
  • i_want_ak_noip
    弑葉天行 2019-08-08 16:59

    其实这个没有死规定,但是memset效率的确比直接赋值高(尽管也很慢),所以用memset。
    还有,用memset也算好习惯。毕竟等将来你编的程序需要处理几千万个变量时,memset的优势就能体现出来了。

    点赞 评论

相关推荐