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

标签 c arrays struct

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

相关文章:

c++ - struct Node* 和 Node* 在函数调用上有什么区别?

c - 如何初始化指向堆栈的指针

c - struct C 中的映射结构

c - 警告 : assignment from incompatible pointer type for a 2D array pointer

ISO C 中的跨平台并发库

python - 如何操作声明为 `self.tab[(' _',0)]` 的数组而不明确知道它包含什么?

java - HTTP "Partial"Java 获取请求报文

c - 字符串长度对未初始化字符指针的影响

c - 僵尸进程即使线程仍在运行

python - NumPy 将 np.dot 或 np.multiply 的输出添加到现有数组