对于二级指针的认识

对于二级指针的认识
      今天在写链栈实现括号匹配的时候遇到了一个指针的问题。
     我在main函数里定义了一个结构体指针,然后使用func(Node *p)这样的函数申明让它去指向另一个指针,然后程序就报错了。
     我调试了一下午,都不知道到底错在哪,以前写链表的时候一直都是这样做的。然后我就把问题放在了csdn上让万能的网友来帮忙,于是就颠覆了我对指针的认识。我才发现还有func(Node *p)func(Node *&p),func(Node **p)三种不同的用法。
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct SqStack
{
    char c;
    struct SqStack *next;
}SqStack;
void InitStack(SqStack *s,SqStack **top)
{
    *top=s;
}
void InitStack(SqStack *s,SqStack **top)
{
    top=s;
}
void Push(SqStack *s,SqStack *&top,char c)//入栈,先对原来的top赋值,然后再申请新空间,top指向新空间
{
    SqStack *temp;
    temp=(SqStack *)malloc(sizeof(SqStack));
    top->c=c;
    temp->next=top;
    top=temp;
}
int main()
{
    SqStack *base;
    SqStack *top;
    SqStack *s;
    s=(SqStack *)malloc(sizeof(SqStack));
    s->next=NULL;
    InitStack(s,&top);
    char ch;
    scanf("%c",&ch);
    Push(s,top,ch);
    printf("%c",top->next->c);
}

如要将top指针在函数里指向s,不能用    SqStack *top这样的函数声明,这样的函数声明不会真正修改主函数,只有
SqStack **top
这样将指针的地址传入函数将其修改才行,指针指向的对象为一级指针如Swap函数,而需要在函数里才说明指向的对象,需要传二级指针。
所以以后不要用
SqStack *top
应该用
SqStack *&top
在主函数的形式都是一样的。
而如果是
SqStack **top
那么在主函数指针名前应该加&。在函数内应该用*p->成员。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章