麻烦使用指针传递Structs数组

时间:2015-02-24 05:36:01

标签: c arrays struct arguments

我遇到了一个用于写入数组元素的函数的问题。

我认为可能是因为我没有正确传递struct数组。我想知道是否有人可以指出如何正确地做到这一点。我一直在搞砸它而不是解决它。

假设我有一个函数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];

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

2 个答案:

答案 0 :(得分:1)

  

通过创建静态,你已经使代码效率低下来作为内存   无论是否存在,数据结构都已被搁置   程序执行时是否需要。(使用静态数据   结构,结构的大小是固定的。)

声明像

这样的函数
void addPerson(newPerson *pers[],int *num)

调用函数

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

OR

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

答案 1 :(得分:0)

我能够通过将结构声明为静态

来使其工作

static newPerson person[MAX_PERSONS];

不确定这是否是一个实际修复,或者它是否只是掩盖了我的问题。