我在写数组元素时遇到了函数问题。

我认为可能是因为我没有正确传递结构数组。我想知道是否有人可以指出如何正确执行此操作。我一直在解决问题,而不是修复问题。

假设我有一个功能menu.c
我声明我的结构newPerson person[MAX_PERSONS];
然后运行我的函数addPerson(person, &num);
以下是

void addPerson(newPerson *pers, int *num){
    pers[*num] = (newPerson) {
                    "Michelle", "Leo", "6136458798", STUDENT,
                    .data = {.s = {9, 1234.50, 3}}
                };
    *num = *num + 1;
}


它正在运行,但是无法正确打印出来,我猜是因为它没有在我希望它写到pers[num]的位置。我尝试以这种方式也以addPerson(&person, &num);而不是addPerson(person, &num);的方式调用该函数,但是随后出现此错误


  警告:从不兼容的指针类型传递“ addPerson”的参数1 [默认启用]





  注意:预期为“ struct newPerson”,但参数的类型为“ struct newPerson()[20]”


我也尝试过将功能更改为void addPerson(newPerson *pers[], int *num){,但那里什么也没有。想知道是否有人可以指出我在这里做错了什么以及如何解决我的问题。任何帮助,将不胜感激,谢谢!

忘记提及addPerson函数在我运行它的某些地方可以使用。

int menu(int num) {
    newPerson person[MAX_PERSONS];
    //printf("THE NUMBER START OF MENU IS %d\n", num); test counter

    //addPerson(person, &num);    <- WRITES AND READS PROPERLY IF DONE HERE

    int option;
    printf(
            "\n\tPlease choose one of the following options to continue (0-9): ");
    scanf("%d", &option);


if (option == 1) { //program will ask for name input
    addPerson(person, &num);  <- HOWEVER IT DOES NOT WRITE OR READ PROPERLY HERE
    menu(num);
}


这两个函数都在menu.c中调用
但是,当我在if语句中调用addPerson时,它无法正确写入/读取。

只需将结构声明为静态即可解决问题!
static newPerson person[MAX_PERSONS];

我不确定这是忌讳还是什么,但是它解决了我的问题!

最佳答案

通过使静态,您使代码作为内存的效率低下
  数据结构已被搁置,无论是否
  程序执行时是否需要(带有静态数据
  结构,结构的大小是固定的。)


像这样声明功能

void addPerson(newPerson *pers[],int *num)


像这样调用函数

void addPerson(newPerson *pers, int *num);


要么

void addPerson(newPerson pers[], int *num);

10-06 00:34