首页
社区
课程
招聘
有趣的函数运用方法
发表于: 2005-9-21 22:57 6350

有趣的函数运用方法

2005-9-21 22:57
6350
这两天在其他论坛上看到这么一段程序
main(_){for(--_;putchar(_++["J!Mpwf!Zpv\1"]-1) ; ) ; }
这段程序的putchar函数运用的很巧妙。特意拿出来给大家看看

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
2
写为简单的如下:
"J!Mpwf!Zpv\1" 每个减一是"I Love You\0"

char a[]="J!Mpwf!Zpv\1";
main(_)
{
    for (--_; putchar(a[_++] - 1););
}

$ gcc test.c
$ ./a
I Love You

最初由 xeno 发布
这两天在其他论坛上看到这么一段程序
main(_){for(--_;putchar(_++["J!Mpwf!Zpv\1"]-1) ; ) ; }
这段程序的putchar函数运用的很巧妙。特意拿出来给大家看看
2005-9-22 21:35
0
雪    币: 236
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
我发这个帖子的目的不在于这个I love U,而是在于putchar函数的调用方法。至少这种方法是在教科书上没有见过的。
2005-9-22 23:22
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个C的语法是我在C语言的书上没有找到,哪个地方有介绍啊?

int i=2;
char c;
c=i["abcdefg"];         //就是这一行
assert(c=='b')
2005-9-22 23:25
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
5
main(t,_,a)char *a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?
main(2,_+1,"%s %d %d\n"):9:16:t<0?t<-72?main(_,t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#\
;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l \
q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# \
){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' \
iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# \
}'+}##(!!/"):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')+t,_,a+1)
  :0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,
"!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
2005-9-23 08:43
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
6
保存成.c文件,编译
2005-9-23 08:45
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
7
int putchar(int c)
成功返回的就是c,
for循环在字符串结束时,因为返回0,判断语句为假,而中止,
这就是for循环,不是putchar有什么特殊用法

最初由 xeno 发布
我发这个帖子的目的不在于这个I love U,而是在于putchar函数的调用方法。至少这种方法是在教科书上没有见过的。
2005-9-23 13:02
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
8
c=j[ "abcdefg" ]
也就是c="abcdefg"[j] ;
char a[5]="abcde";

a[1]=1[a]=*(a+1)=b
一个意思

验证一下:
char a[5]="abcde";
main()
{
printf("a[1]:%c,1[a]:%c,*(a+1):%c",a[1],1[a],*(a+1));
}

$ gcc test.c
$ ./a
a[1]:b,1[a]:b,*(a+1):b

最初由 auser 发布
这个C的语法是我在C语言的书上没有找到,哪个地方有介绍啊?

int i=2;
char c;
c=i["abcdefg"]; //就是这一行
........
2005-9-23 13:09
0
雪    币: 236
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
原来如此,受益匪浅。谢谢!
2005-9-23 15:24
0
雪    币: 208
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
(--_; putchar(a[_++] - 1););

这个下划线 "_" 是什么意思???
2005-9-24 20:18
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
最初由 walaog 发布
(--_; putchar(a[_++] - 1););

这个下划线 "_" 是什么意思???


"_"可以作变量名.
2005-9-24 20:48
0
游客
登录 | 注册 方可回帖
返回
//