gpt4 book ai didi

c - 如何将结构数组的地址传递给函数?

转载 作者:行者123 更新时间:2023-11-30 17:44:29 24 4
gpt4 key购买 nike

所以我有这个问题。我初始化结构数组的一个参数,然后我想在另一个函数中检查它。我查了一下,地址与 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com