使用C / C ++中的计数器变量访问字符串

时间:2012-12-07 05:43:04

标签: c string pointers

  

可能重复:
  In C arrays why is this true? 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,它也可以。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

printf内使用此功能,就像您所做的那样,所有这些都会评估相同的内容:

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

另请参阅:With arrays, why is it the case that a[5] == 5[a]?