堆栈中关于指针返回的问题!怪事!
关于指针的一个问题:近来遇到一个问题,实在搞不懂是为什么,故拿出来请各位高手指教!
下面的这个程序是在vc++ 中运行的,不能运行成功,但在TC中就能成功!
程序的功能很简单,一看就明白,就不必我说了吧!
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
typedef struct{
char key;
}element;
element stack[10];
int top=-1;
void add(int *top,element item){
if (*top>=MAX-1){
printf("stack is full!\n");
return;
}
stack[++(*top)]=item;
}
element deletes(int *top){
if(*top<=-1){
printf("stack is empty!\n");
exit(0);
}
(*top)--;
return stack[*top+1];
}
void main(){
char key;
element s;
printf("input a char:\n");
scanf("%c",&key);
s.key=key;
add(&top,s);
s=deletes(&top);
printf("%c",s.key);
}
但如果把其中的函数改为
element deletes(int *top){
if(*top<=-1){
printf("stack is empty!\n");
exit(0);
}
return stack[(*top)--];
}
就可以成功!,不知道为什么!,我觉得两个函数应该一样的吧!