c语言简单的问题,为什么【1】【2】都选c?

main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(-*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}

[1]A)-1 B)1 C)0 D)4
[2]A)5 B)6 C)7 D)10

请详细解释

(1) 0
(2) 7

a=p1==&m; 关系运算符优先级高于 赋值运算符 所以 == 先执行。
p1存的是 k的地址, &m是变量m的地址,在堆栈上 变量 k , m的地址不可能一样,所以 p1 != &m 的所以 p1==&m的值为假
a = 假;时,编译器会隐式的把"假"转换为0;
所以 a = 0;

b = (-*p1)/(*p2)+7 ;
*p1 的值是4,*p2的值是6 -4/6 = 0 因为这是int操作 所以值为int型
0+7=7 所以 b = 7
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-06-13
a=p1==&m P1和&M不相等所以就是0
b=(-*p1)/(*p2)+7 -4/6等于0,所以加7就是7了
第2个回答  2007-06-13
第一个,先从右边开始看,变量m的地址肯定和p1不同,所以表达式的值是0,0又赋给了变量a,所以a的值是0。
第二个,b的值很容易看出是7点几,但是输出的时候要整型输出,那就是7。