我想将数据保存在名为var options = {
allowForgotPassword: false
};
的数组中。这些数组的大小可能不同,并且是名为plist
的结构的一部分。我知道如何创建一个大小为ParticleList
的列表。 n[0]
例如大小为2.因此,大小为2的列表。但如果我想要创建类型为n[0]
的大小为n[0], n[1], n[2]
的多个列表,我该怎么办?
简而言之:我应该如何修改我的代码,以便以ParticleList
或`pl [numberOfList] - > plist [PositionInArray] = -1'
pl[numberOfList].plist[PositionInArray] = -1
答案 0 :(得分:1)
您似乎正在寻找名为灵活数组成员的语言功能。它的工作原理如下:
typedef struct{
int plistSize;
double plist[];
} ParticleList;
ParticleList *pl = malloc( sizeof(ParticleList) + sizeof(double[n]) );
pl->plistSize = n;
...
free(pl);
n
的大小是plist
的大小。
答案 1 :(得分:1)
你的意思是这样吗?
typedef struct{
int plistSize;
double* plist;
} ParticleList;
int main()
{
int i, z = 0;
/* Assuming you have three lists with three different sizes */
double list1[2] = {-1.0, -1.1};
double list2[3] = {-2.0, -2.1, -2.2};
double list3[4] = {-3.0, -3.1, -3.2, -3.3};
/* Create an array of three Particle Lists */
ParticleList pl[3] = {{list1, 2},{list2, 3},{list3, 4}};
/* Access the values in the Particle Lists */
for(i = 0; i < 3; i++)
{
printf("ParticleList pl[%i]:\n", i);
for(z = 0; z < pl[i].plistSize; z++)
{
printf("pl[%i].plist[%i] = %f\n", i, z, pl[i].plist[z]);
}
}
/* Change the first item of the second list */
pl[1].plist[0] = 2.3;
}
这样您就可以通过
访问每个列表中的每个项目 pl[<index of list>].plist[<index of list item>]
使用灵活的数组成员更加动态(这样,其中一个列表可以被另一个不同大小的列表替换):
注意我改变了结构!
typedef struct{
int plistSize;
double plist[];
} ParticleList;
int main()
{
int i, z = 0;
ParticleList *pl[3];
/* Allocate memory for the lists */
pl[0] = malloc( sizeof(ParticleList) + sizeof(double[2]) );
pl[0]->plistSize = 2;
pl[1] = malloc( sizeof(ParticleList) + sizeof(double[3]) );
pl[1]->plistSize = 3;
pl[2] = malloc( sizeof(ParticleList) + sizeof(double[4]) );
pl[2]->plistSize = 4;
/* Write the values in the Particle Lists */
for(i = 0; i < 3; i++)
{
printf("ParticleList pl[%i]:\n", i);
for(z = 0; z < pl[i]->plistSize; z++)
{
pl[i]->plist[z] = -i;
}
}
/* Print the values */
for(i = 0; i < 3; i++)
{
printf("ParticleList pl[%i]:\n", i);
for(z = 0; z < pl[i]->plistSize; z++)
{
printf("pl[%i]->plist[%i] = %f\n", i, z, pl[i]->plist[z]);
}
}
/* Change the first value of the second list */
pl[1]->plist[0] = -1.1;
/* Replace the first list by a new one */
free(pl[0]);
pl[0] = malloc( sizeof(ParticleList) + sizeof(double[5]) );
pl[0]->plistSize = 5;
/* Assign some new values to the new list 1 */
pl[0]->plist[0] = -4.1;
pl[0]->plist[1] = -4.2;
pl[0]->plist[2] = -4.3;
pl[0]->plist[3] = -4.4;
pl[0]->plist[4] = -4.5;
/* Print the values */
for(i = 0; i < 3; i++)
{
printf("ParticleList pl[%i]:\n", i);
for(z = 0; z < pl[i]->plistSize; z++)
{
printf("pl[%i]->plist[%i] = %f\n", i, z, pl[i]->plist[z]);
}
}
/* free all lists before exiting the program */
for(i = 0; i < 3; i++)
{
free(pl[i]);
}
return 0;
}