1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define ElemType int
 5 
 6 // 定义队列结点
 7 typedef struct QNode
 8 {
 9     ElemType data;
10     struct QNode* next;
11 }QNode, *QNodePrt;
12 
13 // 定义队首、队尾指针
14 typedef struct
15 {
16     QNodePrt front, rear;
17 }LinkQueue;
18 void InitQueue(LinkQueue &link)
19 {
20 //    link.front=link.rear=(QNodePrt)malloc(sizeof(QNode));
21     link.front=link.rear=(QNode*)malloc(sizeof(QNode)) ;
22 //    QNode*与QNodePrt具有等价效果  QNode*=QNodePrt
23     link.rear->next=NULL;
24     
25 }
26 void InitQueue0(LinkQueue* link)//使用指针传递 
27 {
28     link->front=link->rear=(QNode*)malloc(sizeof(QNode));
29     link->front->next=NULL;
30 }
31 
32 void InitQueue1(LinkQueue * &link)//创建指针别名为函数形参 
33 {
34     link->front=link->rear=(QNode*)malloc(sizeof(QNode));
35     link->front->next=NULL;
36 
37 }
38 //重新创建了指针 
39 
40 
41 
42 
43 int main(int argc, char const* argv[])
44 {
45     
46 //    LinkQueue* que;
47 //    que->front->data=1;
48 //    printf("%d\n",    que->front->data);
49 ////    无法输出data数据 
50 //    QNodePrt node;
51 //    node->data=2;
52 //    printf("%d\n",node->data);
53 ////    无法输出data数据 
54 //
55 ////原因:两次创建指针都(没有实例化对象) 没有将结构体成功创建出来知识创建了其类型的指针
56 //
57 //    LinkQueue que0;
58 //    que0.front->data=3;
59 //    printf("%d\n",que0.front->data);
60 ////无法输出data数据
61 ////原因:虽然LinkQueue完成成创建,但是front rear指针并没有指向实例化对象  
62 //    InitQueue(que0);
63 //    que0.front->data=9;
64 //    printf("%d\n",que0.front->data);
65 //    输出data数据 9
66 
67     LinkQueue que1;
68     LinkQueue* link=&que1;  
69     InitQueue0(&que1);
70 //    InitQueue0(link); 初始化使用指针进行地址传递 
71 //que1地址传递 
72     que1.front->data=10;
73     printf("%d\n",que1.front->data);
74 //输出data 10
75 
76 
77     LinkQueue que2;
78     LinkQueue* link1=&que2; 
79     InitQueue1(link1);
80     link1->front->data=9;
81 //    实参传递必须为指针类型 
82 //    InitQueue1(&que1); 报错必须传递指针 不可直接直接传递地址 
83     printf("%d\n",que2.front->data);
84 //输出data 9
85      
86 return 0;
87 }