从函数返回结构元素的malloc

时间:2014-05-03 20:13:19

标签: c arrays struct return malloc

好的,我现在正在学习Visual Studio 2010中的C语言,我的目标是为平面结构(包含空中交通管制员模拟信息)分配足够的内存,以及#34; num"元素。下面是我对该功能的代码。 setData是一个已经完成的工作函数,用于存储单个平面结构数据。我的问题:如何调用setData" num"时间量并将所有元素返回主要?我的想法是当我返回分配的内存的第一个字节时,循环存储每个元素的数据....这是元素1而不是所有元素。

struct plane* list_intialize(unsigned int num)
{
struct plane * ptr;
int i=0;

ptr = (struct plane *) malloc(num * sizeof (struct plane));

    for(i=0;i<num;++i)
        setData(&ptr[i]);

return ptr;
}

这是我对这个功能的说明: 这里将无符号整数listsize传递给此函数,您将创建一个大小为listsize的链接列表。这将通过重复使用malloc并调用setData来将数据初始化为struct plane字段来执行。每次将进程放入列表时,都需要将其放置,以便按字段距离(按升序排序)对列表进行排序。你返回列表的头部

我有升序排序我只需要其余的

1 个答案:

答案 0 :(得分:1)

你可以依靠指针算法:

int i;
for (i = 0; i < num; ++i) 
    setData(ptr+i);

或者您可以使用数组语法:

int i;
for (i = 0; i < num; ++i) 
    setData(&ptr[i]);

两者基本相同。

返回值(ptr - 指向第一个数组元素的指针)代表整个数组。您可以按如下方式访问整个字段:

// main
struct plane *pPlanes;
pPlanes = list_initialze(10);
int i;
for (i = 0; i < 10; ++i) {
    // do something with plane
    printf("%d\n", pPlanes[i].structelement);    // array syntax
    printf("%d\n", (pPlanes+i)->structelement);  // pointer arithmetic
}