user-0 提问: c语言指针问题，

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define STACK_INIT_SIZE 32 #define STACKINCREMENT 10  #define TRUE 1 #define FALSE 0  typedef char SElemType; typedef struct node {     SElemType *base;     SElemType *top;     int stacksize; }Sqstack;  typedef enum ret {     ERROR = -1,        OK = 0, }Status;  //栈的顺序存储表示 Status InitStack(Sqstack *L) {     //构造一个空栈     (*L).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));     if(!(*L).base)         exit(ERROR);     (*L).top = (*L).base;     (*L).stacksize = STACK_INIT_SIZE;      return OK; } Status DestroyStack(Sqstack *L) {     if((*L).top == (*L).base)         return ERROR;     free((*L).base);     (*L).base = NULL;     return OK; } //清空栈 Status ClearStack(Sqstack *L) {     (*L).top = (*L).base;     return OK; } //判断栈是否为空 int IsEmpty(Sqstack *L) {     if((*L).top == (*L).base)         return TRUE;     else         return FALSE; }  int StackLength(Sqstack *L) {      if((*L).top != (*L).base)         return  (*L).top - (*L).base;     else         return 0; }  Status GetTop(Sqstack *L,SElemType *e) {     if((*L).top != (*L).base)         *e = *((*L).top - 1);     return OK; } //插入元素为e的新元素 Status Push(Sqstack *L,SElemType e) {     if((*L).top - (*L).base >= (*L).stacksize)     {         (*L).base = (char *)realloc((*L).base, ((*L).stacksize + STACKINCREMENT) * sizeof(char));         if(!(*L).base)             return ERROR;         (*L).stacksize += STACKINCREMENT;     }     *((*L).top) = e;     (*L).top++;      return OK; }  Status Pop(Sqstack *L,SElemType *e) {     if (!IsEmpty(L))         *e = *(--L->top);     return OK; } //遍历栈中的元素 Status StackTravers(Sqstack *L, void(* vi)(SElemType)) {     if((*L).top == (*L).base)         return ERROR;     while((*L).top > (*L).base)     {         vi(*(*L).base);         (*L).base++;     }     return 0; } #if 0 //算法3.1数制转换 void conversion() {     Sqstack s;     int mod,n,e;     InitStack(&s);//初始化栈     scanf("%d",&n);//等待用户输入     //printf("%d",n);     while(n)//进行8进制的转换     {         mod = n % 8;         n =  n/ 8;         Push(&s,mod);     }     while(!IsEmpty(&s))//输出结果     {         Pop(&s,&e);         printf("%d\n",e);     }     printf("\n"); } #endif //算法3.2.2括号匹配检验 Status check() {     Sqstack s;     char ch[80], *p, e;      if(!InitStack(&s))//初始化栈成功     {         printf("请输入一个表达式：\n");         fgets(ch, 80, stdin);         p = ch;         while (*p)//没有到串尾              switch(*p) {                 case '(':                 case '[':                     Push(&s,*p++);                     break;                  case ')':                 case ']':                     if(!IsEmpty(&s)) {                         Pop(&s,&e);                         if((*p == ')' && e!='(')|| (*p== ']'&& e!= '[')) {                             printf("左右括号不匹配\n");                             exit(ERROR);                         } else {                             p++;                             break;                         }                     } else {                         printf("缺乏左括号\n");                         exit(ERROR);                     }                     break;                  default:                     p++;             }     }     if(IsEmpty(&s))//字符串结束时栈空         printf("括号匹配\n");     else         printf("右括号不匹配\n");     return OK; }   int main() {     check();     return 0; } 问题还比较多，以上是我的demo，对比一下吧～

user: user-1
content: 贴出更多一些的代码，并且将你的测试用例贴一下；

user: user-0
content: 代码太多就没全贴，将pop函数注释掉后，*p的值就没有发生变化，pop是对栈进行操作的，为什么*p的值也会改变呢？