将内存分配给指向struct的指针

时间:2013-04-10 16:16:05

标签: c pointers struct

在我正在开发的程序中,我有这样的结构:

typedef struct _event {
  int id;
  char title[30];
  char desc[60];
  int state;
} event;

在这个程序的某个部分,我将使用一个函数,该函数需要一个指向这个结构的指针。

void event_foo(event *e)
{
 /* Something will be done on this function, 
    with certain parameters of the pointer to the struct are needed */
}

但是在访问这个函数之前,我需要为这个指向struct的指针分配内存。

int main()
{
  event newevent;

  /* In some place before invoking the function, 
     memory assignation is required */

  event_foo(&newevent);

  return 0;
}

¿有什么建议吗?

3 个答案:

答案 0 :(得分:3)

此:

event newevent;

创建一个堆栈分配的event实例,并已为其提供内存。在newevent超出范围之前,此内存有效。如果event_foo()将要阅读newevent的任何成员,而不仅仅是更新它们,那么您必须在致电newevent之前初始化event_foo()的成员。

如果您已声明指向event的指针:

event* newevent;

然后在访问其成员之前需要为newevent分配内存:

newevent = malloc(sizeof(*newevent));

在这种情况下,newevent的内存一直存在,直到free(newevent)被调用。

答案 1 :(得分:2)

你做的方式是正确的

你做的宣言

event newevent;

为类型newevent

event分配静态内存

当你调用函数

event_foo(&newevent);

&的开头添加newevent,这意味着您已提供newevent的地址(指针)作为函数的输入参数

进入该功能,您可以修改结构的参数

示例

void event_foo(event *e)
{
  e->id = 5;
  strcpy(e->title, "any string");
  strcpy(e->desc, "any string2");
  e->state = 1;
}

main()中,在致电event_foo()后,您可以通过这种方式访问​​您的数据

event_foo(&newevent);
printf("id = %d\ntitle = %s\ndesc = %s\nstate = %d\n",
       newevent.id,
       newevent.title,
       newevent.desc,
       newevent.state);
return 0;

答案 2 :(得分:0)

如果需要e只指向作为参数传递的对象,则不需要为它分配内存。通过指针我们直接访问对象的内存位置,这样我们就可以直接对传递的成员进行任何更改对象