在C中声明数组时,是否允许使用它:
int arrSize = 10;
float weight[arrSize];
这会如何影响编译器?
答案 0 :(得分:2)
在C99中是允许的,但在C11及更高版本中是可选的,假设它在函数内(不是全局文件级范围)。它通常会在堆栈上分配数组,并且数组上的sizeof
也可以工作,因此对该特定变量进行运行时操作。
如果不允许,它当然不会构建。
答案 1 :(得分:1)
这种可变长度数组(VLA)的声明
int arrSize = 10;
float weight[arrSize];
对于具有自动存储持续时间的数组,允许在块范围内。此功能是在C99中引入的。现在这样的功能是可选的。
您也可以使用多维VLA并将函数参数声明为VLA。
这是一个示范程序。
#include <stdio.h>
void set_array( size_t, size_t, int[][*] );
void display_array( size_t, size_t, int [*][*] );
void set_array( size_t m, size_t n, int a[m][n] )
{
for ( size_t i = 0; i < m; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
a[i][j] = n * i + j;
}
}
}
void display_array( size_t m, size_t n, int a[][n] )
{
for ( size_t i = 0; i < m; i++ )
{
for ( size_t j = 0; j < n; j++ )
{
printf( "%d ", a[i][j] );
}
putchar( '\n' );
}
}
int main(void)
{
size_t m = 2;
size_t n = 3;
int a[m][n];
set_array( m, n, a );
display_array( m, n, a );
return 0;
}
它的输出是
0 1 2
3 4 5
答案 2 :(得分:-1)
在C90中,此代码是非法的,因为无法声明可变长度数组。即使arrSize
是一个整数值,它仍然在内存中占有一席之地,并且不能在此上下文中使用。
如果您使用的是C,则可以在头文件或程序顶部放置“define”语句:
#define arrSize 10
...
float weight[arrSize];
或者如果使用C ++,可以使用以下方法:
const int arrSize = 10;
float weight[arrSize];