这就是我正在尝试做的事情: 我需要一个长度取决于变量 (NumOfRequests) 的全局数组。该变量是在函数内设置的。我认为不可能像我在以下代码中尝试的那样在函数中声明全局数组:
static uint8 NumOfRequests;
typedef struct
{
uint16 IndexToRequest;
GdXRequestData_ts RequestData;
bool RequestSent;
} GdRequests;
static void SetupRequestStructures( void )
{
uint8 i;
for( i = 0; EepromData_ps.GD_Indices[i] != 0xFFFF; i++ )
{
NumOfRequests = i + 1;
}
GdRequests Requests[NumOfRequests];
for( i = 0; i < NumOfRequests; i++ )
{
Requests[i].IndexToRequest = EepromData_ps.GD_Indices[i];
}
}
据我所知,不可能先声明一个数组,然后再决定它的长度或更改其长度。
那么有谁知道如何根据函数中设置的变量声明长度的全局数组的另一种解决方案?
如有任何反馈,我们将不胜感激。如果您投赞成票或反对票,请告诉我原因,以便我可以在以后的问题中改进。
最佳答案
您可以使用动态内存分配来执行此任务。看malloc和 free 。下面是全局结构数组上动态内存分配的简单示例:
#include <stdio.h>
#include <stdlib.h>
typedef struct _MyStruct
{
int a;
int b;
} MyStruct;
MyStruct *g_Array = NULL;
void populatearray(MyStruct *array, int length)
{
int i;
for(i = 0; i < length; i++)
{
array[i].a = i;
array[i].b = i;
}
}
void printstructs(MyStruct *array, int length)
{
int i;
for(i = 0; i < length; i++)
{
printf("array[%d].a = %d\narray[%d].b = %d\n\n", i, array[i].a, i, array[i].b);
}
}
int main()
{
g_Array = malloc(50 * sizeof(MyStruct));
if(!g_Array)
{
puts("Malloc failed");
return 0;
}
populatearray(g_Array, 50);
printstructs(g_Array, 50);
free(g_Array);
return 0;
}
关于C - 不可能在函数内声明全局数组。其他解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40595173/