// strings is a 2D array (each string is 11 bytes long)
char strings[][11] = {"0123456789", "2222244444", "3333366666"};
printf("String 3 Character 2 is %c\n", strings[2][1]);
如何使用指针算法代替strings[2][1]
?
答案 0 :(得分:13)
在C中,a[b]
与*(a+b)
相同(并且由于添加是可交换的,这意味着它也等同于b[a]
。人们经常为国际混淆C代码竞赛撰写文章依靠这个,使用像x["string"];
之类的东西。不用说,除非你故意成为邪恶的,否则最好避免那种事情......
编辑:对于任何确定他们对该主题的理解是否符合要求的人,可以随意分析以下内容并在运行之前正确预测其输出:
#include <stdio.h>
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c+3, c+2, c+1, c };
char ***cpp = cp;
main()
{
printf("%s", **++cpp);
printf("%s ", *--*++cpp+3);
printf("%s", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
如果记忆服务,该特定代码的信用(责备?)归Thad Smith所有。
答案 1 :(得分:0)
我是如何做到的?
char strings[][11] = { "0123456789", "2222244444", "3333366666" };
printf("String 3 Character 2 is %c\n", *(*(strings + 2) + 1));
答案 2 :(得分:0)
*(*(strings+2)+1)