这种在 C 字符串中访问字符的方式如何工作?
How does this way of accessing character in C-String work?
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]
,即索引和 pointer/array.
的切换位置
所以在你的情况下表达式 2[p]
等于 *(2 + p)
等于 *(p + 2)
等于 p[2]
.
使用例如2[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 字符串方面的专家。在弄乱了代码之后,我明白了它是如何工作的,但是我不清楚一件事,那就是这种从 char* 字符串访问 char 的方式。
我的问题是,2[p]
如何获取索引 2 处的字符?
它会解析为 *(p+2)
还是有其他事情发生?另外,是否有任何文档或任何文章可以解释此行为?
对于任何数组或指针 a
和索引 i
,表达式 a[i]
等于 *(a + i)
.
因为 +
的 commutative property 表达式 *(a + i)
等于 *(i + a)
,根据第一个等式等于 i[a]
,即索引和 pointer/array.
所以在你的情况下表达式 2[p]
等于 *(2 + p)
等于 *(p + 2)
等于 p[2]
.
使用例如2[p]
仅用于(不良)混淆,因此请不要在任何地方使用它。