首页 > C/C++开发工具专区 > C/C++其它IDE资源 > 用Win-TC编译与用TC2.0编译的差异
2006
08-18

用Win-TC编译与用TC2.0编译的差异

现在有一种在Windows下运行的一种叫Win-TC的C语言源代码编辑工具以小巧的身躯和强大的功能受到很多网友的青睐。但最近有位朋友给我一个关于指针的源程序。用Win-TC编译和英文版TC2.0编译出来的结果截然不同,请看下面的代码:

#include ”stdio.h”

main(){

int a=100,*pa=&a,*pp=pa;

printf(“a=%d,pa=%d,pp=%d”,a,pa,pp);

getch();

}

在Win-TC中编译运行,结果为:a=100,pa=4040,pp=4295。这个结果让人哭笑不得。

在英文版TC2.0中编译运行,结果为:a=100,pa=-60,pp=-60。这个结果很正常。

但是把 printf(“a=%d,pa=%d,pp=%d”,a,pa,pp); 改成 printf(“a=%d,pa=%d,pp=%d”,a,*pa,*pp); 则两个编译运行结果相等,都是a=100,pa=100,pb=100。到底问题出在哪里,也许只有Win-TC的作者才能解释。所以劝一下那些用WIN-TC的朋友们写好程序后最好再到英文的TC中编译调试一次。


———————————————————— ——————–

网友xingchenyiyi 评:

看到了“用Win-TC编译与用TC2.0编译的差异”这片文章。我就文中作者的用法问题作
一解释!程序: 
int a=100,*pa=&a,*pp=pa;

printf(“a=%d,pa=%d,pp=%d”,a,pa,pp);

int a=100很规则,但”&a”代表一个地址,”&”是取地址符号,取得了存储值是100的内
存地址。而”*pa”的用发表示指针地址”pa”中存储的值。”int *pa;”表示指针类型pa中
存储的值是整形。也就是说它可以直接等于常量。此时”*pa=%d”这种用法是把”a”的地
址存储进了”pa”.”*pp=pa”这个用法和前面的一样是把”pa”的地址存储进了”pp”.其中”pp”,”pa”都表示地址,而”*pa”,”*pp”都表示具体的值。打印输出的时候
“printf(“a=%d,pa=%d,pp=%d”,a,pa,pp);”,大家可以看到a是代表数值的,”pa、pp”都代表的是地址,此刻输出就成了”pa、pp”的临时地址。所以会看到”pa=4040,pp=4295″这样的输出是正常的,当然英文版的输出结果”pa=-60,pp=-60″,结果是负值,表示有错误。在win-tc下用结果是”pa=-70,pp=-70″。正确的打印输出格式:”printf(“a=%d,pa=%d,pp=%d”,a,*pa,*pp); ”。”*pa,*pp”两个代表数值。结果输出正确。这样才可以和”%d”形成对应关系。


用Win-TC编译与用TC2.0编译的差异》有 5 条评论

  1. 死亡的飞翔 说:

    我觉得那位网友的话倒不是很确切

    1、首先,他说道”“int *pa;”表示指针类型pa中存储的值是整形。“ 这是不对的。他应该表示pa的值是一个地址,这个地址指向某个整数变量。

    2、又有一句:”*pp=pa”这个用法和前面的一样是把”pa”的地址存储进了”pp”.这也是有误的。事实上,前面pa定义时初值为a的地址,而执行语句 int  *pp=pa后,pp的值显然为pa的值也即是a的地址,而非所谓的”pa“的地址

    不过,我没用过Win  TC所以不知道这到底是什么原因,也许是Win TC本身的不完善吧,谁知道呢。我还是建议大家其实可以换一换编译环境,比如VC或DevC++等,毕竟这些环境很方便,不论是调试还是写代码时,都很适合一些初学者的~~

  2. yixianliu 说:

    看不懂…郁闷了!

  3. tujunfeng 说:

    指针输出格式 用%u、%p的话,pa和pp的值相等,%d不知道为什么不行

  4. hiroki 说:

    感谢楼主啊

留下一个回复