c/c++语言开发共享如何在C中初始化一个指向NULL的动态指针数组?

我是C的新手,我不明白为什么以下两个语句不会产生相同的结果:

char *fields[14] = {NULL}; const int num_fields = 14; char *fields[num_fields] = {NULL}; 

选项1有效,但选项2没有。 它说“可变大小的对象可能不会被初始化”并且它会发出警告“警告:数组初始化程序中的多余元素”。 我在OSX上使用gcc 4.2.1。

谢谢你分享你的想法!

    第二个对象称为VLA(可变长度数组),由C99很好地定义。 为了达到你想要的效果,你可以使用:

     for (i = 0; i < num_fields; i++) fields[i] = NULL; 

    问题的要点是const int num_fields14非常不同,它不是常量,它是只读的。

    即使使用const关键字定义num_fields,编译器也只将其解释为变量。 你可以通过定义以下宏来替代它:

    #define num_fields 14

    char * fields [num_fields] = {NULL};

    尽管num_fields具有const限定符,但编译器仍将其视为变量。

    因此,您试图声明一个可变大小的数组,并且初始化器( {NULL}部分)不能与它们一起使用。

    您的构造在C ++中工作,其中const int将被视为编译时常量(“常量表达式”),因此可用作编译时数组大小。

    (这方面是B. Stroustrup的C ++设计目标之一,如果可能的话,不需要编译时宏)

    但是在C中,你对“num_fields”的定义有效地声明了一个带有预设值的只读内存位置,因此在C规则下不是一个在编译时有效的“常量表达式”,因此不能用作数组大小在最外面的“计划”范围内。

      以上就是c/c++开发分享如何在C中初始化一个指向NULL的动态指针数组?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(计算机技术网)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ctvol.com/c-cdevelopment/549896.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐