[英]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 );
始终等于2
或1
,具体取决于所使用的系统。
您已经将分配数组的大小存储在变量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.