返回信息流//Begin
if((*foo = 0) || ((void*)foo == (void*)&foo)) {
//PASS!!!
}
要求不改变if的判断条件,在Begin处对foo进行适当操作,使得程序能够进入if语句内部(即PASS处)
这是一条镜像帖。来源:北邮人论坛 / cpp / #46004同步于 2010/11/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
问一道C程序题
starkey
2010/11/11镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这题还真是淡疼。。。
【 在 starkey 的大作中提到: 】
: //Begin
: if((*foo = 0) || ((void*)foo == (void*)&foo)) {
: //PASS!!!
: ...................
能否解释一下?
【 在 hotbestic 的大作中提到: 】
: int foo[1];
: --
: 这个世界上从一开始就没有什么真相和谎言,有的只是严酷的事实--------蓝染惣右介
: ...................
数组名只在几种情况下不转化成指针,其中就有&
*foo,foo将会被当成指针看待,而地址又是foo[0]的地址,即使赋值了也是赋值为0了,就是false,&foo:foo不转换成指针(数组名不是指针,当然底层都是地址实现上有点区别),这里直接取得数组首地址,也就和foo存的地址一样,所以(void*)foo == (void*)&foo
#include <stdio.h>
int main()
{
int foo[1];
foo[0]=99;
if((*foo = 0) || ((void*)foo == (void*)&foo))
{
printf("%d",foo[0]);
}
}
看看有没有其它更好的解释
【 在 starkey 的大作中提到: 】
: //Begin
: if((*foo = 0) || ((void*)foo == (void*)&foo)) {
: //PASS!!!
: ...................
foo[0]=99;
这句话是必要的吗?
【 在 awds888 (Your highness) 的大作中提到: 】
: 数组名只在几种情况下不转化成指针,其中就有&
: *foo,foo将会被当成指针看待,而地址又是foo[0]的地址,即使赋值了也是赋值为0了,就是false,&foo:foo不转换成指针(数组名不是指针,当然底层都是地址实现上有点区别),这里直接取得数组首地址,也就和foo存的地址一样,所以(void*)foo == (void*)&foo
: #include <stdio.h>
: ...................
貌似不是,运行了下,没有也能过
不过他可能是要说明下,即使赋值了,还是0
【 在 renne 的大作中提到: 】
: foo[0]=99;
: 这句话是必要的吗?
: 【 在 awds888 (Your highness) 的大作中提到: 】
: ...................
对,本来没加的,我想看看赋值了没,不知道这种会不会短路运算
【 在 xiangziwade 的大作中提到: 】
: 貌似不是,运行了下,没有也能过
: 不过他可能是要说明下,即使赋值了,还是0
: 【 在 renne 的大作中提到: 】
: ...................