#include<stdio.h>
#include<string.h>
int main()
{
char * c = "GATECSIT2017";
char *p = c;
printf("%d", (int)strlen(c+2[p]-6[p]-1));
return 0;
}
我开始用C ++编写代码,所以我不是C-Strings的专家。在搞乱代码之后,我理解它是如何工作的,但有一点我不清楚,这就是从char *字符串访问char的方式。
我的问题是,2[p]
如何获得索引2处的字符?
它会解析为*(p+2)
还是还有其他事情发生?此外,是否有任何文档或任何文章可以解释这种行为?
答案 0 :(得分:5)
对于任何数组或指针a
和索引i
,表达式a[i]
等于*(a + i)
。
由于+
的{{3}},*(a + i)
表达式等于*(i + a)
,根据第一个等式i[a]
,即切换索引和指针/数组的位置。
因此,在您的情况下,表达式2[p]
等于*(2 + p)
,等于*(p + 2)
,等于p[2]
。
使用例如2[p]
仅用于(不良)混淆,因此请不要在任何地方使用它。