繁体   English   中英

在不知道其大小的情况下在 main() 之前声明一个全局数组 c

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

如何在不知道数组大小的情况下声明数组? 大小将在主 function (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:所以,数组的声明实际上有效。 问题在于我检查数组大小的方式。

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

这里声明了一个指针而不是一个数组

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]);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM