#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int *Triplet;
typedef int ElemType;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
T=(int *)malloc(3*sizeof(int));
if(!T)
exit(OVERFLOW);
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
Status Get(Triplet T,ElemType i,ElemType e)
{
if(i<1||i>3)
return ERROR;
e=T[i-1];
return e;
}
Status Put(Triplet &T,ElemType i,ElemType e)
{
if(i<1||i>3)
return ERROR;
T[i-1]=e;
return T[i-1];
}
void IsAscending(Triplet T)
{
if(T[0]<=T[1]&&T[1]<=T[2])
printf("是升序!\n");
else
printf("不是升序!\n");
}
void IsDescending(Triplet T)
{
if(T[0]>=T[1]&&T[1]>=T[2])
printf("是降序!\n");
else
printf("不是降序!\n");
}
Status Max(Triplet T,ElemType &e)
{
e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);
return e;
}
Status Min(Triplet T,ElemType &e)
{
e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return e;
}
void main()
{
ElemType v1,v2,v3,i,e1,e2,e3,e4;
Triplet T=NULL;
e1=e3=e4=0;
printf("请输入v1,v2,v3的值:\n");
scanf("%d %d %d",&v1,&v2,&v3);
printf("请输入i,e2的值:\n");
scanf("%d %d",&i,&e2);
InitTriplet(T,v1,v2,v3);
printf("a\n");
printf("T的第i元的值是:%d\n",Get(T,i,e1));
printf("T的第i元的值被换为e2:%d\n",Put(T,i,e2));
IsAscending(T);
IsDescending(T);
printf("T的最大元素的值是:%d\n",Max(T,e3));
printf("T的最小元素的值是:%d\n",Min(T,e4));
getchar();
getchar();
}
以上程序是《数据结构》一书上的三元组例题,我一模一样的写了下来在WIN-TC上编译却提示几个函数的参数说明语法错误,结果我把函数的参数的取地址符号&去掉后错误提示就没有了(如函数Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)中的Triplet &T ),可是去掉取地址符号&后的程序就不符合函数要求了。。。。而且问题还有就是为什么一模一样的函数在VC++却能顺利的编译了出来。。。。。
小弟真的好郁闷,上网查也没这种错误的详细讲解,希望大家能帮手解决下!!!!!
19 个解决方案
#1
珍惜生命,远离那个岁数比你还大的tc吧。
#2
计算机是1946年发明的,现在大家都在研究!!!!请说说我的问题吧!!
#3
你的问题在于:老编译器对标准的支持度不够。
所以是编译器的问题。
换个编译器吧。
比如换这个: http://topic.csdn.net/u/20100903/23/b0e105ee-4551-4531-8717-8357fffbfc09.html
#4
顺便问个问题 如果
typedef int *Triplet
那么
Triplet &T
是什么意思,是表示T是一个指针么?
那么 只是 int &T 又是什么意思?
typedef int *Triplet
那么
Triplet &T
是什么意思,是表示T是一个指针么?
那么 只是 int &T 又是什么意思?
#5
应该是typedef int* Triplet吧
那就是int的指针类型。
&符号为c++中的引用符,可用指针代替
int &T 表示引用实参,而不是重新卫星餐分配空间。
over
那就是int的指针类型。
&符号为c++中的引用符,可用指针代替
int &T 表示引用实参,而不是重新卫星餐分配空间。
over
#6
C里面好像没有引用这个概念吧,引用是C++才提出来的东西
#7
Win-TC是C编译器,VC++是C++编译器
#8
你在用1946年的计算机 ?
#9
win-tc老了,vc++支持的东西多,所以不报错。不过还是没有一个像java eclipse这样不用安装的开发环境
#10
看到这里我就郁闷了,我看的是《数据结构 C语言版》 怎么就出来了C++的语法,这不是作弄人吗?怎么老师又不说,最郁闷的就是问老师什么原因,他竟然说我编错了吧,TMD我是和课本上的一模一样!!!!!
#11
老师才不管呢。。。。他又不会挨个试一遍。。。。书估计也是作者的研究生执笔的呢。。。。
#12
凡是编译器的问题,除非很懂的,一般都说不明白,应该还是兼容性的问题
#13
严蔚敏的书上是伪码! 她用 &,是表示,在函数内部可能会对该变量造成修改!你在编程的时候,要用 指针符 *
#14
那不是取地址符号,是引用。tc不支持吧
#15
是引用!!说起伪码,我就觉得好烦。。。对伪码的无从入手已经不是我一个人的烦恼了,大家都抱怨书本上的伪码不好理解,一模一样的代码在不同的编译器不一定可以运行,好像WINT-TC这样的C语言编译器在我们新生中是比较普及,可是很多时候书本上的代码并不能编译成功。而其中的原因有时候竟然是因为伪码是C++的。又或者是要用别的编译器才可以编译,其中的原因对一个初学者来说简直就是折磨!很多人学《数据结构 C语言版》的,最多看的不是课本,听得最多也不是老师,而是要看百度知道,看网上的教程,很多时间就这样纠结在一个无语的问题--代码中有C++的代码,C编译器不能编译。。。。。。。。。。。
#16
那不是"取址符号",那是"引用符号",这个符号只在C++有,如果你写C语言程序,本来你的语法就不合法。我估计你根本没有理解数据结构,只是在抄代码而已
#17
1. TC不是在新生中普及,只有一些学校还用15年前就被淘汰的编译器
2。 伪代码是非常正确的教学方法,给你一个能在特定编译器编译通过的代码,只能让一些学生懒得思考,直接抄代码。楼主遇到这种问题时,应该问问自己,你的C语言过关么?
2。 伪代码是非常正确的教学方法,给你一个能在特定编译器编译通过的代码,只能让一些学生懒得思考,直接抄代码。楼主遇到这种问题时,应该问问自己,你的C语言过关么?
#18
顶阿荣
#19
说的太对了!!!!
#20
#1
珍惜生命,远离那个岁数比你还大的tc吧。
#2
计算机是1946年发明的,现在大家都在研究!!!!请说说我的问题吧!!
#3
你的问题在于:老编译器对标准的支持度不够。
所以是编译器的问题。
换个编译器吧。
比如换这个: http://topic.csdn.net/u/20100903/23/b0e105ee-4551-4531-8717-8357fffbfc09.html
#4
顺便问个问题 如果
typedef int *Triplet
那么
Triplet &T
是什么意思,是表示T是一个指针么?
那么 只是 int &T 又是什么意思?
typedef int *Triplet
那么
Triplet &T
是什么意思,是表示T是一个指针么?
那么 只是 int &T 又是什么意思?
#5
应该是typedef int* Triplet吧
那就是int的指针类型。
&符号为c++中的引用符,可用指针代替
int &T 表示引用实参,而不是重新卫星餐分配空间。
over
那就是int的指针类型。
&符号为c++中的引用符,可用指针代替
int &T 表示引用实参,而不是重新卫星餐分配空间。
over
#6
C里面好像没有引用这个概念吧,引用是C++才提出来的东西
#7
Win-TC是C编译器,VC++是C++编译器
#8
你在用1946年的计算机 ?
#9
win-tc老了,vc++支持的东西多,所以不报错。不过还是没有一个像java eclipse这样不用安装的开发环境
#10
看到这里我就郁闷了,我看的是《数据结构 C语言版》 怎么就出来了C++的语法,这不是作弄人吗?怎么老师又不说,最郁闷的就是问老师什么原因,他竟然说我编错了吧,TMD我是和课本上的一模一样!!!!!
#11
老师才不管呢。。。。他又不会挨个试一遍。。。。书估计也是作者的研究生执笔的呢。。。。
#12
凡是编译器的问题,除非很懂的,一般都说不明白,应该还是兼容性的问题
#13
严蔚敏的书上是伪码! 她用 &,是表示,在函数内部可能会对该变量造成修改!你在编程的时候,要用 指针符 *
#14
那不是取地址符号,是引用。tc不支持吧
#15
是引用!!说起伪码,我就觉得好烦。。。对伪码的无从入手已经不是我一个人的烦恼了,大家都抱怨书本上的伪码不好理解,一模一样的代码在不同的编译器不一定可以运行,好像WINT-TC这样的C语言编译器在我们新生中是比较普及,可是很多时候书本上的代码并不能编译成功。而其中的原因有时候竟然是因为伪码是C++的。又或者是要用别的编译器才可以编译,其中的原因对一个初学者来说简直就是折磨!很多人学《数据结构 C语言版》的,最多看的不是课本,听得最多也不是老师,而是要看百度知道,看网上的教程,很多时间就这样纠结在一个无语的问题--代码中有C++的代码,C编译器不能编译。。。。。。。。。。。
#16
那不是"取址符号",那是"引用符号",这个符号只在C++有,如果你写C语言程序,本来你的语法就不合法。我估计你根本没有理解数据结构,只是在抄代码而已
#17
1. TC不是在新生中普及,只有一些学校还用15年前就被淘汰的编译器
2。 伪代码是非常正确的教学方法,给你一个能在特定编译器编译通过的代码,只能让一些学生懒得思考,直接抄代码。楼主遇到这种问题时,应该问问自己,你的C语言过关么?
2。 伪代码是非常正确的教学方法,给你一个能在特定编译器编译通过的代码,只能让一些学生懒得思考,直接抄代码。楼主遇到这种问题时,应该问问自己,你的C语言过关么?
#18
顶阿荣
#19
说的太对了!!!!