我在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->成員。