开发者社区 问答 正文

C 变量初始化

编译器:GCC 4.4.7
1、char p[12];
2、char p[12]={0x00};
3、char p[12];memset(p,0x00,12);

以上三种变量的初始化的差异是什么?
第一种是否被初始化为全0,还是p的各个字节都是默认随机内存?
第二种是否只设置了p[0]=0x00,其他字节都是默认随机值?
第三种是否是最“保险”的方式?比如紧接着有:

p[0]='a',p[1]='b';printf("%s",p);

展开
收起
a123456678 2016-06-07 20:23:50 1795 分享 版权
1 条回答
写回答
取消 提交回答
  • 1,第一种根据编译器可能会有不同值,但是总的来不会是0,除非是全局变量,默认会是0
    2,第二种全部会是0
    3,第三种也全是0,和2一样只要有赋值出现,剩余元素不去赋值就是0。

    2和3效果一样,但是哪种速度快要看反汇编代码。

    一下是vs的code和运行结果:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        char p1[12];
        char p2[12] = {[5]='c'};
        char p3[12]; memset(p3, 0x00, 12);
    
        for (int i = 0; i < 12; i++){
            printf("%d, %x\n", p1[i], p1[i]);
        }
        printf("\n");
        for (int i = 0; i < 12; i++){
            printf("%d, %x\n", p2[i], p2[i]);
        }
        printf("\n");
        for (int i = 0; i < 12; i++){
            printf("%d, %x\n", p3[i], p3[i]);
        }
    
        return 0;
    }
    2019-07-17 19:31:00
    赞同 展开评论
问答分类:
问答地址: