面试题:C++ 中 char、const char、char* const、const char* const 的区别?

在 C++ 中,char*const char*char* const 和 const char* const 是四种不同的指针类型,它们的区别在于指针本身和指向的数据是否可以被修改。以下是它们的详细解释和区别:


1. char*

  • 定义:指向字符的指针,指针和指向的数据都可以修改。
  • 特点
    • 指针可以指向不同的内存地址。
    • 指向的数据可以被修改。

2. const char*

  • 定义:指向常量字符的指针,指针可以修改,但指向的数据不能被修改。
  • 特点
    • 指针可以指向不同的内存地址。
    • 指向的数据是常量,不能被修改。

3. char* const

  • 定义:指向字符的常量指针,指针不能修改,但指向的数据可以被修改。
  • 特点
    • 指针是常量,不能指向其他内存地址。
    • 指向的数据可以被修改。

4. const char* const

  • 定义:指向常量字符的常量指针,指针和指向的数据都不能修改。
  • 特点
    • 指针是常量,不能指向其他内存地址。
    • 指向的数据是常量,不能被修改。

5. 总结对比

类型指针是否可修改数据是否可修改示例
char*char* ptr = "Hello";
const char*const char* ptr = "Hello";
char* constchar* const ptr = "Hello";
const char* constconst char* const ptr = "Hello";

6. 记忆技巧

  • const 在 * 左侧:表示数据是常量,不能修改。
    • 例如:const char* 或 const char* const
  • const 在 * 右侧:表示指针是常量,不能修改。
    • 例如:char* const 或 const char* const
  • 两个 const:表示指针和数据都是常量,都不能修改。
    • 例如:const char* const

7. 示例代码

#include <iostream>

int main() {
    char str[] = "Hello";

    // char*
    char* ptr1 = str;
    ptr1[0] = 'h';      // 修改数据
    ptr1 = "World";     // 修改指针

    // const char*
    const char* ptr2 = str;
    // ptr2[0] = 'h';   // 错误:不能修改数据
    ptr2 = "World";     // 修改指针

    // char* const
    char* const ptr3 = str;
    ptr3[0] = 'h';      // 修改数据
    // ptr3 = "World";  // 错误:不能修改指针

    // const char* const
    const char* const ptr4 = str;
    // ptr4[0] = 'h';   // 错误:不能修改数据
    // ptr4 = "World";  // 错误:不能修改指针

    return 0;
}

8. 关键点

  • char*:指针和数据都可修改。
  • const char*:指针可修改,数据不可修改。
  • char* const:指针不可修改,数据可修改。
  • const char* const:指针和数据都不可修改。

理解这些区别有助于在编程中正确使用指针,避免不必要的错误。

THE END
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容