我正在阅读"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).在这种情况下,这两个功能肯定是完全相同的吗?
注意我知道有更优雅的方式编写这段代码,我刚刚完成了本书的复制.
我相信这两个版本用于说明数组和指针之间的区别.
不,不是真的.这两个版本用于演示可以使用a[i]语法或直接指针算法实现数组索引.
正如您正确指出的那样,这两个版本执行完全相同的操作.毕竟,它们都是实现的strcpy.关键在于作者正试图展示实现相同最终结果的不同方法.