gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:18:32 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com