C语言程序,error C2143,error C2059,求高手解决!

代码如下:
#include<stdio.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 100 // 存储空间初始分配
#define STACKINCREMENT 10 // 存储空间分配增量

typedef struct
{
char *base;
char *top;
int stacksize;

}SqStack;

void InitStack(SqStack &s)
{
//构造一个空栈s
s.base = (char*)malloc(STACK_INIT_SIZE*sizeof(char));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;

}//InitStack

编译后在“void InitStack(SqStack &s)”这行显示如下错误:
1>d:\编程\c语言数据结构\数据结构实验二\数据结构实验二\数据结构实验二.c(17): error C2143: 语法错误 : 缺少“)”(在“&”的前面)
1>d:\编程\c语言数据结构\数据结构实验二\数据结构实验二\数据结构实验二.c(17): error C2143: 语法错误 : 缺少“{”(在“&”的前面)
1>d:\编程\c语言数据结构\数据结构实验二\数据结构实验二\数据结构实验二.c(17): error C2059: 语法错误:“&”
1>d:\编程\c语言数据结构\数据结构实验二\数据结构实验二\数据结构实验二.c(17): error C2059: 语法错误:“)”

而且后边程序还提示:
1>d:\编程\c语言数据结构\数据结构实验二\数据结构实验二\数据结构实验二.c(159): warning C4013: “InitStack”未定义;假设外部返回 int

程序是哪里出错了?怎么改呢?

求高手指导!
从网上看了一种方法,“把.c改成.cpp”。
error和warning都没了。可为什么要这么改呢?

对了,这程序在vc和vs上都有这现象。求解答!

void InitStack(SqStack &s) 你这是引用变量,只有C++才支持变量的引用!

.c是C的源程序扩展名
.cpp是C++的程序扩展名,所以,你要想编译通过,只能改成cpp
vc vs都是根据文件扩展名来决定用c++编译还是用C编译
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-30
.c是C语言的,
.cpp是C++的
对于不同的文件,编译的过程有点不同,所以为什么改文件后缀会得到不同的结果就是这样原因
第2个回答  2012-10-30
把void InitStack(SqStack &s)改成void InitStack(SqStack * s)
再把里面的s.改成s-> 就行了
第3个回答  2012-10-30
你如果是想用函数InitStack构造一个空栈,应该这么写。
void InitStack(SqStack *s)
{
//构造一个空栈s
(*s).base = (char*)malloc(STACK_INIT_SIZE*sizeof(char));
(*s).top=(*s).base;
(*s).stacksize=STACK_INIT_SIZE;
}
*s表示传入的是指针,使用的时候写InitStack(&s),这样才能对s初始化
相似回答