所以我有这个问题。我初始化结构数组的一个参数,然后我想在另一个函数中检查它。我查了一下,地址与 main() 中的地址相同,但值只是随机的。不知道为什么,求助!
int i;
STOL s[STOLY];
char choice[MAXSTRING] = "jupiiiii", ***p;
/*if ((p = (char ***) malloc(MAXSTRING * sizeof(char **))) == NULL)
exit(-5);*/
for (i = 0; i < STOLY; i++)
s[i].novy = 0;
while (strcmp(choice, "stop"))
{
puts("Casnik alebo bar?");
/* *p = nacitaj_choice();
choice = *p;*/
nacitaj_choice(choice);
free(p);
if (strcmp(choice, "casnik") == 0)
zadaj_stol(0, &s); /*HERE I SEND THE ADDRESS*/
if (strcmp(choice, "bar") == 0)
zadaj_stol(1, &s);
}
我想检查另一个函数中的novy
void zadaj_stol(int typ, STOL *p_s[STOLY])
{
int stol;
printf("Stol cislo: ");
stol = (cislo_stola() - 1);
if (!p_s[stol]->novy) /*HERE IS THE PROBLEM*/
reset_stol(p_s[stol]);
zadaj_udaj(typ, p_s[stol]);
vypis_stol(p_s[stol]);
}
我检查过,p_s 与 &s 相同,但由于某种原因 p_s[stol]->novy 总是类似于 -3782126。顺便说一句,stol 介于 0 到 13 之间
因为我还无法回答我的问题,这是我找到的部分解决方案。 问题是,它仅在 p_s 的索引为 0 时才有效,即 p_s[0]->novy 工作正常,但 p_s[1] 给出调用堆栈,它不知道地址。我不知道为什么。
int main()
{
int i;
STOL s[STOLY], **p_s;
if ((p_s = (STOL **) malloc(sizeof(STOL))) == NULL)
return -5;
*p_s = s;
char choice[MAXSTRING] = "jupiiiii";
for (i = 0; i < STOLY; i++)
s[i].novy = 0;
while (strcmp(choice, "stop"))
{
puts("Casnik alebo bar?");
nacitaj_choice(choice);
if (strcmp(choice, "casnik") == 0)
zadaj_stol(0, p_s);
if (strcmp(choice, "bar") == 0)
zadaj_stol(1, p_s);
}
return 0;
}
void zadaj_stol(int typ, STOL **p_s)
{
int stol;
printf("Stol cislo: ");
stol = (cislo_stola() - 1);
if (!p_s[stol]->novy)
reset_stol(p_s[stol]);
zadaj_udaj(typ, p_s[stol]);
vypis_stol(p_s[stol]);
}
最佳答案
只需将 &s
更改为 s
即可传递数组。您收到错误 error: invalid type argument of '->'
因为 p_s
的类型为 STOL*
,这意味着 p_s [stol]
的类型为 STOL
(不是指针)。 ->
的左侧操作数应该是一个指针。
你可以这样做:
if(!p_s[stol].novy)
代替。
关于c - 如何将结构数组的地址传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19975417/