如果这是一个非常愚蠢的问题,请道歉。
我在这里声明并初始化了一个struct数组(就在for循环之上);
printf("\n>>>");
scanf( "%s" , &CurrentCommand);
if (strcmp(CurrentCommand, "bang") == 0)
{
Clear();
printf("Enter the number of stars to be created: ");
scanf("%d", &NumberOfStars);
struct StarsStruct *Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);
for (int i = 0; i < NumberOfStars; i++)
{
r1 = rand() % (60 + 1 - 0) + 0;
r2 = rand() % (30 + 1 - 0) + 0;
Stars[i].SerialNumber = i;
Stars[i].x = r1;
Stars[i].y = r2;
Plot(r1, r2, '.');
}
}
我已经在第一个IF语句中访问了for循环中所需的元素,但是我无法再在第二个IF循环中访问它们,可能是因为“struct StarsStruct * Stars”是在本地声明的。
那么我怎样才能在另一个if语句中访问它?在开始时声明它不起作用,因为我想用malloc创建数组必须一次完成,声明和初始化。
总而言之,我想访问Stars结构的成员,在我将创建的另一个IF语句中,Stars [1] .SerialNumber等。但是我目前不能。
答案 0 :(得分:3)
您需要进一步定义变量,使其在需要的位置可见。您只需要将其初始化为NULL
,然后您可以稍后将malloc
的结果分配到您需要的位置。
// define up here and initialize to NULL
struct StarsStruct *Stars = NULL;
printf("\n>>>");
scanf( "%s" , &CurrentCommand);
if (strcmp(CurrentCommand, "bang") == 0)
{
Clear();
printf("Enter the number of stars to be created: ");
scanf("%d", &NumberOfStars);
// assign here
Stars = malloc(sizeof(struct StarsStruct) * NumberOfStars);
for (int i = 0; i < NumberOfStars; i++)
{
r1 = rand() % (60 + 1 - 0) + 0;
r2 = rand() % (30 + 1 - 0) + 0;
Stars[i].SerialNumber = i;
Stars[i].x = r1;
Stars[i].y = r2;
Plot(r1, r2, '.');
}
}