今天写了一个栈的初始化,发现初始化失败。代码如下
#include <cstdio>
#define MaxSize 5
typedef struct{
int data[MaxSize];
int top;
}SqStack;
void init(SqStack &S){
S.top=-1;
S.data[MaxSize]={0};//这里无法实现
}
int main(){
SqStack S;
init(S);
return 0;
}
可以发现,栈并未初始化。而代码
#include <cstdio>
#define MaxSize 5
typedef struct{
int data[MaxSize];
int top;
}SqStack;
void init(SqStack &S){
S.top=-1;
//S.data[MaxSize]={0};//这里无法实现
}
int main(){
SqStack S;
init(S);
只要把初始化中的数组注释就可以完成top的初始化,实际上参考书上给的也都是没有数组的初始化,栈的初始化中如果有数组会有问题,因为这里栈传的是S的地址,而S.data又是栈里面下一层数组的地址,很容易出问题。所以以后初始化的时候只要初始化top就可以了
如果一定要初始化数组,可以采取下面的方法
#include <cstdio>
#define MaxSize 5
typedef struct{
int data[MaxSize]={0};
int top=-1;
}SqStack;
int main(){
SqStack S;
return 0;
}
即在定义时初始化