以下是用c语言实现判断静态链表是否递增的代码,但运行是出现逻辑错误,我觉得是不是++list出了问题??

大家有木有更好的构造静态链表的方法啊???求赐教啊#include<stdio.h>#defineTRUE1#defineFALSE0typedefintBool;typ... 大家有木有更好的构造静态链表的方法啊???求赐教啊
#include <stdio.h>
#define TRUE 1
#define FALSE 0
typedef int Bool;
typedef struct{
int data;
int next;
} node;
Bool judge(node *list){
if(list->next==-1) return TRUE;
while(list->next!=-1){
printf("%d\n",list->data);
if(list->data>=(++list)->data) {
printf("%d\n",list->data);
return FALSE;
}

}

return TRUE;

}
void main(){
node list[]={{0,0},{3,-1}};
printf("该静态链表递增:%s\n",judge(list)?"TRUE":"FALSE");
}
展开
 我来答
miniappL6NK2PxHsWPig
2014-06-02 · TA获得超过5004个赞
知道大有可为答主
回答量:1202
采纳率:94%
帮助的人:583万
展开全部
问题就出在 [++list] 这一句中.
不过不是自加运算有问题, 而是比较运算中, 两个字表达式的计算顺序的问题.
[list->data >= (++list)->data]
如果这个表达式是从左往右计算的, 那结果肯定没问题. 但它其实是先计算 >= 号右边的式子, 后计算左边的. 所以, 两次提取的, 都是 list 自加之后的值. 二者肯定相等了.
追问
Java中的>=运算符也是从右到左的吗?
追答
这种情形不能用优先级或结合性来解释. C 语言对此没有规定, 而是交给编译器处理. 根据计算结果可知, VC 是先计算右边的.
C 语言这么做是有它的考虑的, 至于 Java 是怎么考虑和规定的, 我也不是很清楚.
所以, 保险起见, 还是分解成几条无歧义的语句比较好, 除非你十分清除编译器的处理方法.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式