1

可能重复:
在 C 数组中,为什么这是真的?a[5] == 5[a]

在 C++ 参考书中,我找到了一个访问字符串的示例,如下所示:

void main()
{
    char *str = "Test";
    int len, i;

    clrscr();

    len = strlen(str);
    for(i=0 ; i<len ; i++)
    {
        printf("%c", i[str]);
    }

    getch();
}

为什么i[str]有效?i是一个变量,而不是一个数组。

如果字符串被声明为str[]而不是*str.

4

3 回答 3

0

它之所以有效,是因为在 C 中i[str]str[i]是等价的

于 2012-12-07T05:45:33.147 回答
0

i[str]str[i]以相同的方式评估(如*(str+i)

声明时str[]str是指向数组第一个元素的指针

于 2012-12-07T05:45:41.703 回答
0

字符指针指向字符串开头的内存位置,数组索引(例如,str[i])基本上i是在字符串开头添加迭代。

所以,str + i= str[i]= i[str]=i + str

使用 this inside printf,就像你正在做的那样,所有这些都将评估相同:

printf("%c", str[i]);
printf("%c", i[str]);
printf("%c", *(str+i));
printf("%c", *(i+str));

另请参阅:对于数组,为什么 a[5] == 5[a]?

于 2012-12-07T05:46:16.490 回答