黑马程序员技术交流社区
标题:
大神帮我看下这题,谢谢
[打印本页]
作者:
Dmajor
时间:
2014-4-19 10:31
标题:
大神帮我看下这题,谢谢
本帖最后由 Dmajor 于 2014-4-20 00:28 编辑
大神帮我看下这题,谢谢
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);
}
复制代码
这题答案0,7是怎么来的? a=p1==&m;这句我看不懂,什么m的地址等于k的地址又赋给a。
作者:
微尘•逐梦
时间:
2014-4-19 10:43
分析内容在程序中给出
main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;//等价于a=(p1==&m),因为p1=&k,所以p1==&m的值是0,所以a=0。
b=(-*p1)/(*p2)+7;//*p1=k=4,p2=m=6,(-4/6)的值是0,所以b=0+7
printf("a=%d\n",a);
printf("b=%d\n",b);
}
复制代码
所以输出是0,7
作者:
blz01003hm
时间:
2014-4-19 10:46
main()
{int a,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m; //等于 a=(p1==&m)即p1是否等于&m 两个地址比较 等就把1赋给a 不等把0赋给a即a=0
b=(-*p1)/(*p2)+7; //等于b=(-4)/(6)+7 有于-4/6等于0.666....b为int型 取整数部分 即0即0+7即b=0+7
printf("a=%d\n",a);
printf("b=%d\n",b);
}
作者:
愿我能
时间:
2014-4-19 15:49
运算符优先级: 乘、除、求余* / %加、减 < <= > >= 小于、大于、小于等于、大于等于 = = != 等于、不等于//左边的依次大于右边的
a=p1==&m 所以相当于先计算p1==&m &符号表示取该数据的内存地址,显然p1指向的k地址,与m地址不同 ,而c语言的布尔运算只有0和1两种结果,为0.所以a=p1==&m 等价与 a=0; 所以a输出结果为0,至于b上面说的很清楚,数据转换问题还有就是运算优先级搞懂就好说了 ,c语言跟数学一样,只不过稍微多了一些运算符,练得次数多了,就懂了
复制代码
作者:
星河鹭起
时间:
2014-4-19 16:19
a=p1==&m;
这个是运算优先级的问题,首先算p1==&m,然后再算a的赋值。
因为首先p1是指向k的地址,然后这里p1==&m,明显是不想等,所以p1==&m等于0,然后将0赋值给a
作者:
魅影穿眸
时间:
2014-4-23 18:56
楼主你看清楚,a=p1==&m;这一步实际是关系运算符的问题。p1==&m结果为假,所以算出的结果为0,然后再把0赋给a。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2