首页 > 解决方案 > 在 C 中初始化的 const 数组定义是否需要长度参数?

问题描述

const int array[]  = {1,2};
const int array[2] = {1,2};

编译和工作都没有问题。这些有什么区别吗?

(我使用 Codevision,但这并不重要)

标签: ccodevisionavr

解决方案


不,没有区别。

唯一的例外是第二种情况,如果char使用字符串文字初始化数组并且数组的大小不反映'\0'-terminator,那么后者会被切断。

char s[] = "alk" // makes s 4 chars wide
char s[3] = "alk" // makes s 3 chars wide

对于所有其他类型或类型的初始化,编译器应警告初始化程序太大。

如果初始化器比数组“更小”,则其余元素将被初始化,就好像它们是在全局范围内定义的一样,也就是它们是static.

所有这一切都与此上下文中的任何事物是否存在完全无关const


推荐阅读