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

为什么要用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条回答 默认 最新

  • 哈夫曼树 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));
    }
    
    
    评论
    解决 无用
    打赏 举报
查看更多回答(3条)

相关推荐 更多相似问题