This question already has answers here:
Closed 2 years ago.
With arrays, why is it the case that a[5] == 5[a]?
(18个答案)
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字符串的专家。在搞乱代码之后,我明白了它是如何工作的,但有一件事我不清楚,那就是从char*字符串访问char的方法。
我的问题是,如何2[p]获得索引2处的字符?
它是分解成*(p+2)还是发生了其他事情?此外,是否有任何文档或文章可以解释这种行为?

最佳答案

对于任何数组或指针a和索引i,表达式a[i]等于*(a + i)
由于+commutative property,表达式*(a + i)等于*(i + a),根据第一个等式等于i[a],即索引和指针/数组的切换位置。
所以在你的例子中,表达式2[p]等于*(2 + p)等于*(p + 2)等于p[2]
使用例如2[p]仅用于(坏的)模糊处理,因此请不要在任何地方使用它。

关于c - 这种在C-String中访问字符的方式如何工作? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44345393/

10-17 02:43