*s和s [i]在这个函数中有什么区别?

jam*_*mes 0 c arrays pointers

我正在阅读"C编程语言"(Kernighan&Ritchie),在指针一章中,它提供了两个'strcpy'函数的副本.一个用于数组,另一个用于指针.我相信这两个版本是为了说明数组和指针之间的区别,但我看不出是什么.

阵列版本是:

void strcpy(char *s, char *t) {
    int i = 0;
    while ((s[i] = t[i]) != '\0') {
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

指针版本是:

void strcpy(char *s, char *t) {
    while ((*s = *t) != '\0') {
        s++;
        t++;
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,该书还指出'......在评估[i]时,C立即将其转换为*(a + i).在这种情况下,这两个功能肯定是完全相同的吗?

注意我知道有更优雅的方式编写这段代码,我刚刚完成了本书的复制.

Dav*_*nan 5

我相信这两个版本用于说明数组和指针之间的区别.

不,不是真的.这两个版本用于演示可以使用a[i]语法或直接指针算法实现数组索引.

正如您正确指出的那样,这两个版本执行完全相同的操作.毕竟,它们都是实现的strcpy.关键在于作者正试图展示实现相同最终结果的不同方法.