Ordinary programmer 2019-08-08 15:49 采纳率: 33.3%
浏览 1956
已采纳

为什么要用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条)

报告相同问题?

悬赏问题

  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 这个复选框什么作用?
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下