| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 695 人关注过本帖
标题:[求助]
只看楼主 加入收藏
musicyxy
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2004-8-14
收藏
 问题点数:0 回复次数:7 
[求助]

以下程序执行后a的值是( )。 main() { int a,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m; printf("%d\n",a); }

A)4 B)1 C)0 D)运行时出错,a无定值

这题的答案是什么,哪为高手指点一二

2004-09-04 23:28
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

查优先级,或者你运行一下就知道了。
2004-09-04 23:37
musicyxy
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2004-8-14
收藏
得分:0 

答案是0,为什么呢?*p1=&k, a=p1==&m这都代表什么呢?

谢了!


2004-09-04 23:45
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

*p1=&k, //把k地址赋给指针p

a=p1==&m //判断优先级,如果=快过==,就把p1先赋给a再比较,如果==优先于=就先比较p1和m的地址,如果一样就赋a值为1,不一样就赋a值为0。

另外要提醒,就单单用两个地址比较是一定为0的,就是地址不同,所以答案一定为0。 因为比较的是地址而不是值,每个变量的地址都不同,所以怎么比都不同……

[此贴子已经被作者于2004-09-05 00:09:30编辑过]

2004-09-05 00:07
musicyxy
Rank: 1
等 级:新手上路
帖 子:120
专家分:0
注 册:2004-8-14
收藏
得分:0 
谢谢!!

2004-09-05 00:13
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

很明显逻辑运算符 == 的优先级要高于赋值运算符 = (注:赋值运算符的优先级是最低的)

所以说程序先判断 p1 == &m,一看这两个地址显然不等,为 false,在大多书编译器中定义false为0

然后在执行赋值操作, 把 0 赋给a, 所以说答案是: C


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-05 15:56
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 
不错,是0

2004-09-05 16:56
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 

.

[此贴子已经被作者于2004-09-05 18:35:07编辑过]

2004-09-05 18:33
快速回复:[求助]
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017399 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved