读书人

C参数传递,该如何处理

发布时间: 2012-02-10 21:27:41 作者: rapoo

C参数传递
[code=C/C++][/code]
#include<stdio.h>
#include<malloc.h>
#define Maxsize 5
typedef struct elemtype
{
char data[Maxsize];
int front;
int rear;
/*char *font;
char *rear;*///不使用这种结构是有其操作上的不便性造成的,比如clear()
//front 和rear 两个指针是在不断移动的,释放起来很不方便!
}elemtype,*queue;
//void initqueue(queue q)
//{
// *&q=(queue)malloc(sizeof(elemtype));
//q->rear =q->front =0;
//}void clear(queue q)
{
free(q);
}
int queueempty(queue q)
{
return (q->rear ==q->front );
}
int queuelength(queue q)
{
return((q->rear -q->front +Maxsize)%Maxsize);
}
int enqueue(queue q,char c)
{
if((q->rear +1)%Maxsize==q->front )
return 0;
q->data[q->rear ]=c;
q->rear =(q->rear +1)%Maxsize;
return 1;
}
int dequeue(queue q,char *e)
{
if(q->rear ==q->front )
return 0;
*e=q->data [q->front ];
q->front =(q->front +1)%Maxsize;
return 1;
}
[code=C/C++][/code]
#include <stdio.h>
#define Maxsize 5
typedef struct elemtype
{
char data[Maxsize];
int front;
int rear;
/*char *font;
char *rear;*///不使用这种结构是有其操作上的不便性造成的,比如clear()
//front 和rear 两个指针是在不断移动的,释放起来很不方便!
}elemtype,*queue;
extern void initqueue(queue q);
extern void clear(queue q);
extern int queueempty(queue q);
extern int queuelength(queue q);
extern int enqueue(queue q,char c);
extern int dequeue(queue q,char *e);
main()
{
char c;
queue q;
printf("初始化队列\n");
//initqueue(q);//调用这个初始化函数让我的机器崩溃了
q=(queue)malloc(sizeof(elemtype));
q->rear =q->front =0;printf("依次进队列元素a,b,c\n");
if(enqueue(q,'a')==0) printf("队满,不能进队\n");
if(enqueue(q,'b')==0) printf("队满,不能进队\n");
if(enqueue(q,'c')==0) printf("队满,不能进队\n");
printf("队列为%s\n",(queueempty(q)?"空":"非空"));
if(dequeue(q,&c)==0)
printf("队空,不能出队\n");
else
printf("出队一个元素%c\n",c);
printf("队列q的元素个数:%d\n",queuelength(q));
printf("依次进队列元素e,d,f\n");
if(enqueue(q,'e')==0) printf("队满,不能进队\n");
if(enqueue(q,'d')==0) printf("队满,不能进队\n");
if(enqueue(q,'f')==0) printf("队满,不能进队\n");
printf("队列q的元素个数:%d\n",queuelength(q));
printf("出队列序列:");
while(!queueempty(q))
{
dequeue(q,&c);
printf("%c",c);
}
printf("\n");
printf("释放队列\n");
clear(q);
getchar();
}
程序含有上面两个文件,上面的代码可以运行通过,但是,如果将第一个文件的Initqueue(queue q)还原,将main()函数里的红色代码部分改成queue q=0;然后调用initqueue(q),就会出现严重的错误!高手帮忙分析一下:

[解决办法]
void initqueue(queue *q)
{
(*q)=(queue)malloc(sizeof(elemtype));
(*q)->rear =(*q)->front =0;
}

然后main函数里:
queue q = 0;
printf("初始化队列\n");
initqueue(&q);
//q=(queue)malloc(sizeof(elemtype));

读书人网 >C语言

热点推荐