这种访问C-String中字符的方式如何工作?

时间:2017-06-03 15:11:53

标签: c pointers char c-strings

在最近的一次考试中,{p> This question被问到候选人必须找到以下代码的输出:

#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)还是还有其他事情发生?此外,是否有任何文档或任何文章可以解释这种行为?

1 个答案:

答案 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]仅用于(不良)混淆,因此请不要在任何地方使用它。