use*_*859 2 c pointers structure
我有一个结构数组,需要将指向数组的指针传递给函数.
我得到这些编译警告,它在运行时崩溃:
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)
我有一个也是数组的结构
虽然没有"结构也是数组"这样的东西,但你可以创建一个结构数组.你应该首先解开变量typedef和struct变量的声明,如下所示:
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)