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在最近的一次考试中被问及,考生必须找到以下代码的输出:
我开始用C++编写代码,所以我不是C字符串的专家。在搞乱代码之后,我明白了它是如何工作的,但有一件事我不清楚,那就是从char*字符串访问char的方法。
我的问题是,如何
它是分解成
(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