Tomohiko Sakamoto 算法的晦涩 C 语法

mfl*_*ris 3 c syntax dayofweek

我偶然发现了这个版本的 Sakamoto 算法

dow(m,d,y){y-=m<3;return(y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d)%7;}
Run Code Online (Sandbox Code Playgroud)

我在 ideone.com 上尝试过,它确实有效。我对算法的工作原理不感兴趣,让我困惑的是语法。

我认为自己是一名中级 C 程序员,我完全不知道"-bed=pen+mad."[m]代码部分发生了什么。

那是什么???

Oka*_*Oka 5

这是对字符串文字数组订阅。请记住,字符串文字实际上只是一个指向静态内存的指针。

该操作相当于:

int m = 0;
char *str = "-bed=pen+mad.";
str[m];
Run Code Online (Sandbox Code Playgroud)

char 是标量类型,因此您可以使用该值进行算术运算。