在我正在开发的程序中,我有这样的结构:
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;
}
¿有什么建议吗?
答案 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只指向作为参数传递的对象,则不需要为它分配内存。通过指针我们直接访问对象的内存位置,这样我们就可以直接对传递的成员进行任何更改对象