指向 "字符串常量" 和 指向字符串的" 常量的指针"

在写模拟实现strcpy时,在修改目标字符串时,编译出错了。

void my_strcpy(char *dest,const char * str)
{
    assert(str != NULL);
    while (*dest++ = *str++)
    {
        ;
    }
}
int main()
{
    char str1[50] = "hello world";
    char str2[] = { 0 };
    char *str3 = "123456789";
    my_strcpy(str2, str1);
    my_strcpy(str3, str1);
    printf("%s\n", str2);
    printf("%s\n", str3);
    system("pause");
    return 0;

}

这是这段代码,第一次拷贝完并可以进行打印,然而第二次就不能通过编译了。查看了网上资料后得知:

指向 "字符串常量" 和 指向字符串的" 常量的指针"

前者字符串是常量, 后者指针是常量.

常量就是 "不许修改的量", 所以

前者 "不许修改字符串", 后者是 "不许修改指针"

例如:

const char* p = "hello"; // 指向 "字符串常量"
p[0] = 'X'; // 错误! 想要修改字符串的第一个字符. 但是常量不允许修改
p = p2; // 正确! 让p指向另外一个指针.

char* const p = "hello"; // 指向字符串的" 常量的指针"
p[0] = 'X'; // 正确! 允许修改字符串, 因为该字符串不是常量
p = p2; // 错误! 指针是常量, 不许修改p的指向

顺便说一句.
char const * 和 const char* 是一样的. const 的位置在char左边还是右边都一样.
常量指针的const应当写在 *星号的右边.

指向常量字符串的常量指针的写法是 const char* const p = "xx"; 要2个const

发布了19 篇原创文章 · 获赞 18 · 访问量 3650

猜你喜欢

转载自blog.csdn.net/haote216/article/details/84109716