我正在一个C程序中,该程序包含一个指向结构的指针数组。首先,该结构如下所示:
typedef struct
{
int ID;
char Name [20];
} rec;
然后,我有一个函数可以创建以下结构之一:
struct rec* addEntry(){
rec *temp;
temp = malloc(sizeof(rec));
printf("Please give me an ID number\n");
scanf("%d", &temp->ID);
printf("Now give me a name, maximum size for this is 20 characters\n");
scanf("%s", &temp->Name);
return temp;
}
现在,此函数可以正常工作,它会创建结构并返回指向该结构的指针,然后我还有另一个函数来创建指针数组,并用指向结构的指针填充它:
struct rec* returnPointerToPointerArray()
{
rec *pointerArray[2];
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
printf("ID in main : %d\n", pointerArray[1]->ID);
printf("Name in main : %s\n", pointerArray[1]->Name);
pointerArray = malloc(sizeof(rec*)*2);
return pointerArray;
}
为了检查发生了什么,我打印了存储在指针数组中位置的值。此时,指针数组中的值正确。
但是,现在我需要为该pointerArray分配空间并返回一个指向此指针数组的指针,这就是我遇到的问题。
malloc行给我一个错误:
error: incompatible types when assigning to type 'struct rec *[(sizetype)(size)]' from type 'void *'
现在澄清一下,我不能使用链表,而必须使用指针数组。要添加到主循环中,我在以下代码中出现另一个错误:
rec *pointerArray[2];
pointerArray = returnPointerToPointerArray(2);
printf("ID in main : %d\n", pointerArray[0]->ID);
printf("Name in main : %s\n", pointerArray[0]->Name);
这给了我以下错误:
error: incompatible types when assigning to type 'struct rec *[2]' from type 'struct rec *'
欢迎您提供任何帮助。
在此先感谢,Ylva
这段代码没有意义:
struct rec* returnPointerToPointerArray()
{
rec *pointerArray[2];
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
...
pointerArray = malloc(sizeof(rec*)*2);
return pointerArray;
}
您正在定义一个指针的堆栈数组,并struct rec
为它们分配对象的堆地址,然后尝试将两个指针的基于堆的数组分配给一个堆栈的地址。它永远不会编译。
由于您的函数设计为返回指向rec
类型的对象的指针(我猜这将是数组中两个结构的第一个),因此您应首先在堆上为两个指针分配空间(并因此使用double指针),然后将其填充/返回:
struct rec** returnPointerToPointerArray()
{
rec **pointerArray;
pointerArray = malloc(sizeof(rec*)*2); // Allocates 2 pointers
pointerArray[0] = addEntry();
pointerArray[1] = addEntry();
...
return pointerArray;
}
完成后,您还应该释放分配的内存。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句