C 中带有初始化的 const 数组定义是否需要长度参数?
Does a const array definition with initialization in C require a length parameter?
const int array[] = {1,2};
const int array[2] = {1,2};
编译和运行都没有问题。这些有什么区别吗?
(我使用 Codevision,但这并不重要)
不,没有区别。
唯一的例外是第二种情况,如果用字符串文字初始化 char
数组并且数组的大小不反映 '[=12=]'
终止符,则后者会被砍掉。
char s[] = "alk" // makes s 4 chars wide
char s[3] = "alk" // makes s 3 chars wide
对于所有其他类型或类型的初始化,编译器应警告初始化程序过大。
如果初始化器是 "smaller" 那么数组,其余元素被初始化,就好像它们是在全局范围内定义的一样,就好像它们是 static
.
所有这些与此上下文中的任何内容是否 const
完全无关。
const int array[] = {1,2};
const int array[2] = {1,2};
编译和运行都没有问题。这些有什么区别吗?
(我使用 Codevision,但这并不重要)
不,没有区别。
唯一的例外是第二种情况,如果用字符串文字初始化 char
数组并且数组的大小不反映 '[=12=]'
终止符,则后者会被砍掉。
char s[] = "alk" // makes s 4 chars wide
char s[3] = "alk" // makes s 3 chars wide
对于所有其他类型或类型的初始化,编译器应警告初始化程序过大。
如果初始化器是 "smaller" 那么数组,其余元素被初始化,就好像它们是在全局范围内定义的一样,就好像它们是 static
.
所有这些与此上下文中的任何内容是否 const
完全无关。