【发布时间】:2012-09-29 21:18:26
【问题描述】:
我有一个结构数组,需要将指向该数组的指针传递给函数。
我收到这些编译警告,它在运行时崩溃:
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);
}
【问题讨论】:
-
您在崩溃时收到什么信息?
-
./test Last Name First Name Age Segmentation fault (core dumped)
-
你把事情复杂化了。您只是将数组传递给函数。数组中的内容无关紧要。查看 any example 将数组传递给函数。
-
在您发布的代码 sn-p 中实际上是第 23 行 (±2) 时,发布有关第 35 行的错误消息并不好,除非您确定第 35 行。您应该丢失 @
displayArray(&personDetails);中的 987654326@ — 数组的地址与指向数组第一个元素的指针的类型不同(即使地址的数值相同)。这就是编译器告诉你的。通常,数组和指针的 typedef 会使事情变得更加混乱。有一个 typedef,比如说,Person的结构是有意义的。尽可能多地使用它。但不是PERSON[10]等。 -
@JonathanLeffler 至少应将其中的一部分复制到此问题的新答案中。