C中的合法或非法律

时间:2018-03-29 11:55:34

标签: c arrays declaration

在C中声明数组时,是否允许使用它:

int arrSize = 10;
float weight[arrSize];

这会如何影响编译器?

3 个答案:

答案 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];