可能重复:
How to pass an array of struct using pointer in c/c++?
我有一个结构数组,需要将指向数组的指针传递给函数。
我收到这些编译警告,并在运行时崩溃:
test.c:35:5:警告:从不兼容的指针类型中传递'displayArray'的参数1 test.c: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);
}
答案 0 :(得分:7)
我的结构也是数组
虽然没有“也是数组的结构”这样的东西,但你可以创建一个结构数组。您应首先解开typedef
和struct
变量的声明,如下所示:
typedef struct {
char lastName[20];
char firstName[20];
int age;
} PERSON;
PERSON person[10];
现在你可以使用PERSON
作为类型的名称,声明类型PERSON
的变量,指向它们的指针,传递数组等等,就像它是一个内置的值一样-in类型,例如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++;
}
}
答案 1 :(得分:0)
您应该传递一个void指针并将其强制转换为PERSON [10]。
如您所见,您没有将指针传递给PERSON stuct,而是将指针传递给一个本身包含结构的数组。他们不平等。
要使其正常工作,请传递一个void指针和一个表示数组中元素数量的整数。当你收到它时,它将帮助你避免读取超出其分配内存的数组。
答案 2 :(得分:0)
大致写道: **无论如何= *无论[10]
所以你可能只想要 * PPerson
答案 3 :(得分:0)
一个数组可以作为指针传递给函数,所以不要试图作为指向数组的指针传递(顺便说一下,现在PPERSON
被定义为一个指针数组,这不是你的意思必须按原样传递数组,并使PPERSON
成为普通指针(即typedef struct tagdata *PPERSON;
)。
然后你可以在函数中使用“指针”作为普通数组。
答案 4 :(得分:0)
* PPERSON [];这是你真的想要用户或 你想要这样的东西:typedef PERSON * PPERSON;