我正在阅读 K&R 并且在字符指针部分有点困惑。 K&R 提供以下作为带有指针的 strcpy 版本:

void strcpy(char *s, char *t) {
    while ( (*s = *t) != '\0') {
        s++;
        t++;
    }
}

这与使用指向单个字符的指针有何不同?或者 C 只是相信我知道我在做什么并且两种情况都使用指向字符的指针?只是当我有一个这些字符的数组时,它会被 \0 终止,而如果它只是一个字符,那么内存中的后续位置可能是任何东西......这是对的吗?

最佳答案


不同之处在于,当您使用指向单个字符的指针时,您不应增加该指针,而应仅增加一次,条件是您不得取消引用它。在指向字符串单个字符的指针的情况下,指针可以递增,直到超过最后一个元素。
6.5.6 加法运算符:

事实上,指向单个元素的指针表现为指向一个元素数组的指针。

char c = 'A';
char *p = &c;  // Pointer to char
类似于(除了在这种情况下 c 是一个数组)
char c[1] = {'A'};
char *p = c;   // Pointer to the first element of array c.


是的。您有责任注意指针应指向数组/字符串对象的元素或指向它的过去,在后一种情况下不提供取消引用。

关于C 区分指向字符的指针和指向字符数组的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29856540/

10-11 22:09
查看更多