返回指向结构体的指针数组的指针

伊尔瓦

我正在一个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

马可·A

这段代码没有意义:

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;
}

Live Example

完成后,您还应该释放分配的内存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

指向结构体数组的指针

来自分类Dev

指向结构体数组属性的数组指针

来自分类Dev

指向结构体的指针

来自分类Dev

指向结构体中数组的指针

来自分类Dev

指向结构体的指针数组的问题

来自分类Dev

指针数组(指向结构)

来自分类Dev

指向结构数组的指针

来自分类Dev

指向结构体中的指针的指针

来自分类Dev

从现有结构数组中查找并返回指向结构的指针

来自分类Dev

指向包含数组的结构的指针

来自分类Dev

创建指向结构的指针数组

来自分类Dev

是否在C中的结构内返回指向char数组的指针?

来自分类Dev

C#Marhsal函数返回指向结构数组的指针

来自分类Dev

返回指向新数组的指针

来自分类Dev

返回指向数组的指针C ++

来自分类Dev

在结构内部创建指向结构的指针数组

来自分类Dev

指向指针数组的指针

来自分类Dev

C函数返回指向结构的指针

来自分类Dev

如何从函数返回指向结构的指针?

来自分类Dev

在C中返回指向结构的指针

来自分类Dev

c ++从函数返回指向结构的指针

来自分类Dev

创建指向结构的指针数组-C ++

来自分类Dev

如何创建指向结构的指针数组?C ++

来自分类Dev

大小为1的数组与指向结构的指针

来自分类Dev

指向函数中的结构数组的指针

来自分类Dev

指向函数中的结构数组的指针

来自分类Dev

C - 指向动态结构数组的指针

来自分类Dev

指向c中匿名结构数组的指针

来自分类Dev

指向指针成员结构的指针