0

我想用动态数组创建队列,问题是当我测试 int main() 中的 q.rear 值(用于稍后插入数据)时,它不再是-1了。我做错了哪一部分?

这是一段代码:

#include <stdio.h>
#include <conio2.h>
#include <stdlib.h>

typedef struct{
    int *data;
    int front,rear,max;
    }tqueue;
tqueue create(int size)
{
   tqueue q;
   q.data=(int *)malloc(size*sizeof(int));          
   q.front=0;
   q.rear=-1;
   q.max=size;
   return q;   
}
int main()
{
   tqueue q;
   int size=4;
   create(size);
   printf("\n%d",q.rear);
   getch();   
   return 0;
}
4

3 回答 3

0

您有两个不同tqueue的 s,都称为q。一个(您在其中创建的那个create)您初始化,一个(您在其中创建的那个)您main没有初始化。

于 2012-05-09T10:11:34.570 回答
0

您没有分配create()to的结果q。以下调用create() 并丢弃结果,保留q其原始状态:

create(size);

要修复,请将上面的行替换为:

q = create(size);
于 2012-05-09T10:11:54.717 回答
0

您忘记分配返回值:

q = create(size);
于 2012-05-09T10:12:23.563 回答