Codeblocks中写c语言代码,在编译时候报错:
error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
错误原因:
在C语言中是不存在引用,C语言中&表示的不是引用,仅仅是取地址符。
因此,应该使用指针代替引用, 在主函数中传入地址。注意C语言中‘.’和‘->’的区别。
报错代码如下
代码用途:C语言实现栈的初始化和入栈操作
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREACE 10
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype *base;
Elemtype *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S);
Status Push(SqStack &S,Elemtype e);
Status StackTraverse(SqStack S);
Status InitStack(SqStack &S){
S.base = (Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
if(!S.base){
return false;
}
S.stacksize=STACK_INIT_SIZE;
S.top=S.base;
return true;
}
//---------------------入栈函数---------------------
Status Push(SqStack &S,Elemtype e){
//判断是否溢出
if(S.top-S.base>=S.stacksize){
S.base=(Elemtype *)realloc(S.base,(S.stacksize+STACKINCREACE)*sizeof(Elemtype));
if(!S.base){
return false;
}
S.top=S.base+S.stacksize;//注意因为这里的栈底指针的改变,导致栈顶指针随之改变
S.stacksize+=STACKINCREACE;
}
//压栈部分
*S.top=e;
S.top++;//栈顶指针加一
return true;
}
Status StackTraverse(SqStack S){//从栈底到栈顶的方向
if(S.top==S.base){
return false;
}
while(S.base <S.top ){
printf("%d\t",*(S.base++));
}
printf("\n");
return true;
}
int main(){
SqStack stack;
InitStack(stack);
Push(stack,1);
Push(stack,2);
Push(stack,3);
StackTraverse(stack);
}
修改后的正确代码:
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREACE 10
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype *base;
Elemtype *top;
int stacksize;
}SqStack;
Status InitStack(SqStack *S);
Status Push(SqStack *S,Elemtype e);
Status StackTraverse(SqStack S);
Status InitStack(SqStack *S){
S->base = (Elemtype *)malloc(STACK_INIT_SIZE*sizeof(Elemtype));
if(!S->base){
return -1;
}
S->stacksize=STACK_INIT_SIZE;
S->top=S->base;
return 0;
}
//---------------------入栈函数---------------------
Status Push(SqStack *S,Elemtype e){
//判断是否溢出
if(S->top - S->base >= S->stacksize){
S->base=(Elemtype *)realloc(S->base,(S->stacksize+STACKINCREACE)*sizeof(Elemtype));
if(!S->base){
return -1;
}
S->top=S->base+S->stacksize;//注意因为这里的栈底指针的改变,导致栈顶指针随之改变
S->stacksize+=STACKINCREACE;
}
//压栈部分
*(S->top) = e;
S->top++;//栈顶指针加一
return 0;
}
Status StackTraverse(SqStack S){//从栈底到栈顶的方向
if(S.top==S.base){
return -1;
}
while(S.base <S.top ){
S.top--;
printf("%d\t",*(S.top));
}
printf("\n");
return 0;
}
int main(){
SqStack stack;
InitStack(&stack);
Push(&stack,1);
Push(&stack,2);
Push(&stack,3);
StackTraverse(stack);
}
运行结果: