首页
社区
课程
招聘
[求助]特殊语法的C语句求解
发表于: 2009-12-22 22:11 2482

[求助]特殊语法的C语句求解

2009-12-22 22:11
2482
语句如下:

void main()
{
  char n;
   char *m, *k;
  //或者单独 char **k;
    n = *m == *(char*) k;
   //此语法借鉴IDA pro hex-rays 1.1反编译语句 V1 = *V2 == *(_BYTE*)V3
   // 可以知道(_BYTE*)中是强制类型转换的语句,但是,这样一个三目运算,未曾敢想....
}

lcc
bcc
vc
intel c
mingw
均编译通过,无错误,有警告,运行弹出异常程序终止。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对C语言无括号优先级理解得一塌糊涂的人泪奔而过……

PS:这个问题,其实编译成汇编,一看就知道了。
2009-12-22 22:40
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
3
m和k是指针,未初始化不能直接使用
2009-12-22 22:43
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我来模拜大牛的
2009-12-22 22:45
0
雪    币: 196
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
反汇编调试的结果是 *m得到一个随机内存的地址指向变量n。

强制转换部分可以忽略了,我不解的不是强制转换 而是==为何可以成为3目运算的一部分,==优先级8 肯定大于= 优先级15,这是常识。。。我是不清楚这个3目运算的含义。谢谢
2009-12-22 22:51
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哪里有三目运算符?
V1 = *V2 == *(_BYTE*)V3


V1 = *V2 ==( *(_BYTE*)V3)
2009-12-22 23:03
0
雪    币: 335
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
给你加个括号你就明白了。

n = ( (*m) == (*((char*) k)) );
2009-12-22 23:19
0
雪    币: 196
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢各位,自己被自己弄晕了,其实很简单;

*m 若和 *(char*) K相同 n=1 否则 =0 (如果n为int的话)
2009-12-24 23:28
0
游客
登录 | 注册 方可回帖
返回
//