在 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 );
始终等于 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]);
调用未定义的行为,因为分配的数组未初始化。
如何在不知道数组大小的情况下声明数组? 大小将在主函数内计算 (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 );
始终等于 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]);
调用未定义的行为,因为分配的数组未初始化。