【问题标题】:Returning malloc of structure elements from a function从函数返回结构元素的 malloc
【发布时间】:2014-05-03 20:13:19
【问题描述】:

好的,我目前正在 Visual Studio 2010 中学习 C,我的目标是为“num”元素的平面结构(包含空中交通管制员模拟信息)分配足够的内存。下面是我为该功能提供的代码。 setData 是一个已经完成的工作函数,用于存储单个平面结构数据。我的问题:如何让它调用 setData "num" 次并将所有元素返回到 main?我的想法是当我返回分配的内存的第一个字节时,循环存储每个元素的数据......这是元素一个而不是所有元素。

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

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

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

【问题讨论】:

  • 你是对的。有什么问题?
  • 当我调用该函数时,它只显示一个结果而不是“num”个结果。
  • 发布一个完整但尽可能短的工作程序。在这里,您可能做错了太多其他事情,我们需要看到它们。
  • 您想要 1 个还是多个 struct plane ?另外,do not cast the result of malloc.
  • @user3599935:您的代码中没有任何地方尝试“显示”任何内容。它怎么可能“显示”一些东西?

标签: c arrays struct return malloc


【解决方案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
}

【讨论】:

  • 我实际上使用了第二个示例的确切设置,但是在 main 中调用函数时,我只得到一个结构元素返回而不是 num 数量
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多