在C中:如何将结构数组作为指针传递

use*_*859 2 c pointers structure

可能重复:
如何使用c/c ++中的指针传递struct数组?

我有一个结构数组,需要将指向数组的指针传递给函数.

我得到这些编译警告,它在运行时崩溃:

test.c:35:5:警告:从不兼容的指针类型
test.c 传递'displayArray'的参数1 :20:6:注意:期望‘struct tagdata **’但是参数是类型‘struct tagdata (*)[10]’

typedef struct tagdata{
    char lastName[20];
    char firstName[20];
    int age;
} PERSON[10], *PPERSON[];

int genNumber();
void displayArray(PPERSON pPerson);

int main(){
    PERSON personDetails;
    int i;
    char buf[20];

    for (i = 0; i < 10; i++){
        sprintf(buf, "Charlie%d", i);
        strcpy(personDetails[i].firstName, buf);
        sprintf(buf, "Brown - %d", i);
        strcpy(personDetails[i].lastName, buf);
        personDetails[i].age = genNumber();
    }

    displayArray(&personDetails);

    exit(0);
}
void displayArray(PPERSON pPerson){
    int i = 0;

    while (i < 10){
        printf("Last Name   First Name  Age\n");
        printf("%s          %s          %d\n",
               pPerson[i]->lastName,
               pPerson[i]->lastName,
               pPerson[i]->age);
        i++;
    }
}
int genNumber(){
    int n;
    n=random();

    return(n);
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

我有一个也是数组的结构

虽然没有"结构也是数组"这样的东西,但你可以创建一个结构数组.你应该首先解开变量typedefstruct变量的声明,如下所示:

typedef struct {
    char lastName[20];
    char firstName[20];
    int age;
} PERSON; 

PERSON person[10];
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用PERSON类型的名称,声明类型的变量PERSON,指向它们的指针,传递数组等,就像它是内置类型的值一样,例如int:

void displayArray(PERSON pPerson[], int count) {
    int i = 0;

    printf("Last Name   First Name  Age\n");
    while (i < count){
        printf("%s          %s          %d\n",
               pPerson[i].lastName,
               pPerson[i].lastName,
               pPerson[i].age);
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)