int a=3,b=5;
printf(&a["Hi!Hello"],&b["fun/super"]);
printf("%c%c%c%c",1["wst"],2["www"],0["ddd"],5["ewewrew"]);
问:输出什么?
公共主页的做法是反汇编,我觉得没有必要用这么高端的东西,考场上也很难想出这种方法。后来想出一个简单的解法。
由数组与指针的关系知a[1]等价于\*(a+1)即方括号内的是数组名所存地址的偏移值。
所以&a["Hi!Hello"]的含义既是取内存地址为3的内存块,做"Hi!Hello"对应地址的偏移量,再取地址。
设"Hi!Hello"在内存中的地址为s,&a["Hi!Hello"]即等价于&a[s]即&*(a+s)即a+s即s+a即&*(s+a)即&s[a]即&"Hi!Hello"[3]即"Hello"。
剩下的类推。
所以可以得出结论:
一般地,a[b]<=>*(a+b)<=>*(b+a)<=>b[a]