为什么用一级指针形参来接一级指针实参也会修改到实参~?
/*循环队*/ #define MAXLEN 10
typedef struct
{
int element[MAXLEN];
int front , rear;
}Queue;
enqueue(Queue **q)
{
int a,b=9;
if(((*q)->rear+1)%MAXLEN==(*q)->front)
printf("the queue has been no space\n");
else
{
printf("input data : ");
for(;;)
{
scanf("%d",&a);
if(a==00)
return;
(*q)->rear=((*q)->rear+1)%MAXLEN ;
(*q)->element[(*q)->rear]=a;
b--;
if(((*q)->rear+1)%MAXLEN==(*q)->front)
break;
}
}
printf("\n");
}
outqueue(Queue **q)
{
int a;
if((*q)->front==(*q)->rear)
printf("empty\n");
else
{
printf("how much do you want to delete ? : ");
scanf("%d",&a);
printf("delete : ");
for(;a--;)
{
(*q)->front=((*q)->front+1)%MAXLEN;
printf("%d ",(*q)->element[(*q)->front]);
if((*q)->front==((*q)->rear+1)%MAXLEN)
break;
}
printf(" !\n");
}
}
print(Queue *q) /*实参形参都是一级的不是就不会修改到实参吗~? */
{
int i; /*可是在这 如果吧 i都换成q->front 运行就会出问题*/
printf("\n");
i=q->front;
for(i=(i+1)%MAXLEN;i%MAXLEN!=(q->rear+1)%MAXLEN;i=(i+1)%MAXLEN)
{
printf("%d ",q->element[i]);
} printf("\npress any key to continue \n\n");getch();
}
/* 如果把这个print函数于上面那个替换 运行就会出问题
print(Queue *q)
{
printf("\n");
for(q->front=(q->front+1)%MAXLEN;q->front%MAXLEN!=(q->rear+1)%MAXLEN;q->front=(q->front+1)%MAXLEN)
{
printf("%d ",q->element[q->front]);
} printf("\npress any key to continue \n\n");getch();
}
*/
main()
{
Queue *queue;
int a;
queue=(Queue*)malloc(sizeof(Queue));
queue->front=0;
queue->rear=0;
for(;;)
{
printf("press 1 to enter\npress 2 to outqueue\npress 3 to print\n");
scanf("%d",&a);
if(a==1)
{enqueue(&queue); continue;}
if(a==2)
{outqueue(&queue);continue;}
if(a==3)
{print(queue);continue;}
}
}
/*运行测试举例
输入 1 (入队)
输入 1回车 2回车 3回车 4回车 5回车 6回车 7回车 8回车 9回车 (回到主菜单)
输入 2 (出队)
输入 8 (出队8个元素)
输入 3 (打印队中有的元素) 显示 9
输入 1 (入队) ---(如果用注释里的print函数 就会提示队满 !! )*/
[ 本帖最后由 sainimu78 于 2010-4-4 14:07 编辑 ]