将结构传递给函数c

时间:2016-01-14 16:16:37

标签: c arrays function structure

我正在尝试创建一个可以创建结构数组的代码。我还处于早期阶段,我试图将结构传递给一个函数,虽然我认为指针必须是utitlized,但我无法弄清楚如何正确地完成它。这是我的代码。

$scope.searchContacts = function(term) {
  console.log(term)
  $scope.contacts = $scope.contacts.filter(function(contact) {
    var name = contact.name.toLowerCase();
    if(name.indexOf(term.toLowerCase()) > -1) {
      return true;
    }
  });
};

4 个答案:

答案 0 :(得分:2)

请记住阵列的名称"衰变"到指向其第一个元素的指针。因此,在您的情况下,只需使用record来传递"数组" (你无法真正传递数组)到函数。您还需要将函数参数类型更改为struct info*,因为record的类型为struct info*

以下是带有更改注释的工作代码:

#include <stdio.h>

struct age{
    int num;
};

struct name{
    char fname[15];
    char lname[15];
    struct age nameAge;
};

/*void input(struct name *info[]);  Note the change in the declaration */
void input(struct name *info);

int main (void){
    char choice;
    char ans;
    int i;
    struct name record[10];
    do{
        printf("M E N U");
        printf("\n\n[I]nput\n[D]isplay\n[S]earch\n[Q]uit");
        printf("\n\nEnter choice: ");
        choice=tolower(getche());
        system("cls");

        switch (choice){
            case 'i': input(record); /* Note the change here as well */
                      i++;
                    break;
            case 'd': //function here
                    break;
            case 's': //fucntion here
                    break;
            case 'q': printf("The program will now close.");
                    break;
            default: printf("Invalid character. Try again");
                    break;
            }

        getch();
        system("cls");

       }while (choice!='q');
    return 0;
}

void input(struct name *info){ /* Note the change here in the function definition too */
    //codes here
}

答案 1 :(得分:1)

更改函数定义和实现以及函数调用(如果要使用数组)

void input(struct name info[]);
...
           input(record);

或者使用指针(也可以使用数组作为参数)

void input(struct name *info);
...
           input(record);

答案 2 :(得分:1)

您不希望为输入函数执行此操作void input(struct name *info[]);。您希望将对数组中的某个信息结构的引用传递给该函数,因为您一次只能编辑一个信息。

因此,您更改的函数将为void input(struct name *info);,您可以使用input(&record[i]);来调用它,它会提供记录i的地址。您还需要初始化i,因为您从未将其设置为0,而是煽动它。

答案 3 :(得分:1)

另一个建议......

使用记录计数器.... - 每次要添加记录时都必须调用例程。 (我编写了代码,因此您向例程发送指向单个记录结构的指针,而不是传递整个结构。)

#include <stdio.h>

struct age{
    int num;
};

struct name{
    char fname [15];
    char lname[15];
    struct age nameAge;
};

// void input(struct name *info[]);
void input(struct name *info);

int main (void){
char choice;
char ans;
int i;

int n_records=0;

struct name record[10];
do{
    printf("M E N U");
    printf("\n\n[I]nput\n[D]isplay\n[S]earch\n[Q]uit");
    printf("\n\nEnter choice: ");
    choice=tolower(getche());
    system("cls");

    switch (choice){
        case 'i': input(&record[n_records]);
                  i++;
                  nrecords++;
                break;
        case 'd': //function here
                break;
        case 's': //fucntion here
                break;
        case 'q': printf("The program will now close.");
                break;
        default: printf("Invalid character. Try again");
                break;
        }

    getch();
    system("cls");

   }while (choice!='q');
return 0;
}

// void input(struct name *info[]){
void input(struct name *info){
//codes here
}