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

标签 c arrays pointers

我正在阅读“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/

相关文章:

c - 为什么不需要提供托管环境?

javascript - 重命名javascript数组中的键

memory - 字符串的连续赋值会导致内存泄漏吗?

c - 传递指针数组时出现奇怪的输出 - C

c++ - 带有节点迭代器的链表构造函数给出无效指针的错误

c++ - 用结构体数据减去指针

c - 在给定 'signed char ' 的 C : How to avoid Type mismatches (expected 'signed char*' , 中编程)

c - strncpy 和 memcpy 之间的区别?

arrays - 比较数组时删除匹配项

c++ - 使用指针搜索值