以下程序执行后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无定值
这题的答案是什么,哪为高手指点一二
答案是0,为什么呢?*p1=&k, a=p1==&m这都代表什么呢?
谢了!
*p1=&k, //把k地址赋给指针p
a=p1==&m //判断优先级,如果=快过==,就把p1先赋给a再比较,如果==优先于=就先比较p1和m的地址,如果一样就赋a值为1,不一样就赋a值为0。
另外要提醒,就单单用两个地址比较是一定为0的,就是地址不同,所以答案一定为0。 因为比较的是地址而不是值,每个变量的地址都不同,所以怎么比都不同……
[此贴子已经被作者于2004-09-05 00:09:30编辑过]
很明显逻辑运算符 == 的优先级要高于赋值运算符 = (注:赋值运算符的优先级是最低的)
所以说程序先判断 p1 == &m,一看这两个地址显然不等,为 false,在大多书编译器中定义false为0
然后在执行赋值操作, 把 0 赋给a, 所以说答案是: C
.
[此贴子已经被作者于2004-09-05 18:35:07编辑过]