在C中初始化struct

One*_*ero 1 c struct pointers allocation initialization

好的,这是结构的定义:

typedef struct {
   int first;
   int last;
   int count;
   char * Array [50];
} queue;
Run Code Online (Sandbox Code Playgroud)

我使用另一个函数来初始化它

void initialize(queue * ptr){
   ptr=malloc(sizeof(queue));
   ptr->first=0;
   ptr->last=0;
   ptr->count=0;
}
Run Code Online (Sandbox Code Playgroud)

然后我用printf先打印出来,最后打印并计数.这三个都应该是零.然而,我实际得到的是,正如我预期的那样,count是0,但是第一个和最后一个是两个非常大的奇怪数字,并且每次运行程序时它们都会改变.谁能告诉我这里有什么问题?谢谢.

Mar*_*ers 6

您正在按值传递指针.该函数更改了它接收的参数的副本,但调用者的指针未被修改,可能是未初始化的.

您需要更改函数以获取queue**并传递要初始化的指针的地址.

或者,您可以返回指针而不是将其作为参数传递.这是一种更简单的方法.