我正在阅读“The C Programming Language”(Kernighan & Ritchie),在关于指针的章节中,它提供了“strcpy”函数的两个副本。一个用于数组,另一个用于指针。我相信显示这两个版本是为了说明数组和指针之间的区别,但我看不出是什么。
数组版本为:
void strcpy(char *s, char *t) {
int i = 0;
while ((s[i] = t[i]) != '\0') {
i++;
}
}
指针版本是:
void strcpy(char *s, char *t) {
while ((*s = *t) != '\0') {
s++;
t++;
}
}
然而,该书还指出“...在评估 a[i] 时,C 立即将其转换为 *(a+i)”。在哪种情况下,这两个函数肯定在做完全相同的事情?
N.B 我知道有更优雅的方式来编写这段代码,我只是照原样从书中复制了它。
最佳答案
I believe the two versions are shown to illustrate a difference between arrays and pointers.
不,不是真的。这两个版本用于演示可以使用 a[i]
语法或直接指针算法来实现数组索引。
正如您正确指出的那样,这两个版本执行完全相同的操作。毕竟,它们都是 strcpy
的实现。重点只是作者试图展示不同的方法来实现相同的最终结果。
关于c - 这个函数中*s和s[i]有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23443804/