在 main() 之前声明一个全局数组,而不知道它在 c 中的大小

Declare a global array before main() without knowing it's size in c

如何在不知道数组大小的情况下声明数组? 大小将在主函数内计算 (buffer_size)。 此代码无效,大小始终为 2。

我是运行这里的代码:https://www.onlinegdb.com/online_c_compiler

#include <stdio.h>

int *data_array = NULL;


int main()
{   
    int buffer_size = 4;
    data_array = malloc(buffer_size * sizeof(int));
    int size = sizeof(data_array)/sizeof(data_array[0]);

    printf(">> Size %d\n", size);
    for(int i=0; i<size; i++){
        printf(">> data %d\n", data_array[i]);
    }
   
    
    return 0;
}

UPD:所以,数组的声明确实有效。问题在于我检查数组大小的方式。

对于初学者,您不能声明具有静态存储持续时间的可变长度数组。

这里声明的是指针而不是数组

int *data_array = NULL;

此声明中带有 sizeof 运算符的表达式的结果

int size = sizeof(data_array)/sizeof(data_array[0]);

相当于

int size = sizeof( int * )/sizeof( int );

始终等于 21,具体取决于所使用的系统。

您已经将分配数组的大小存储在变量 buffer_size 中。

int buffer_size = 4;
data_array = malloc(buffer_size * sizeof(int));

所以在任何地方进一步使用它,例如在这个声明中

printf(">> Size %d\n", buffer_size);

注意这个for循环

for(int i=0; i < buffer_size; i++){
    printf(">> data %d\n", data_array[i]);

调用未定义的行为,因为分配的数组未初始化。