说明一下,九楼的“查表”这一操作实质是因为很早的C标准中规定将数组(or字符数组)a[b]解释为*(a+b)的形式,就比如九楼 "EEEEEEDCBAA"[s/10]会改为 *("EEEEEEDCBAA"+s/10)可见是将指向“连续内存EEEEEEDCBAA字符数组的第一个位置”的指针右移s/10位的那一位。这样便很好地实现了题目要求。
就比如你在程序中写到:
int array[...],b,c;
...
c=array[b];
这个程序中,c=a[b]这一语句会被编译器在编译时改为c=*(array+b)。稍加改动,我们可以得到c=*(b+array),换成用下标的形式就变成了c=b[array]
是不是很吃惊!一个整形变量居然还可以取下标,而且下标还是数组!但是,这确实一个正确的写法,任何编译器都不会报错并且全部运行正常!你也可以用你的编译器尝试一下!当然,这不是一个好的代码风格。