MST

星途 面试题库

面试题:C++ 中 const char *p 与 char * const p 的区别及简单应用场景

请详细阐述 C++ 中 const char *p 与 char * const p 的区别,并分别举例说明在字符串操作场景下,它们可能的应用方式。
32.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 区别
    • const char *p
      • 这是一个指向const char类型的指针。意味着指针所指向的内容(即字符)是常量,不能通过该指针去修改。但是指针本身可以指向其他的地址。
      • 例如:
const char *p1 = "Hello";
// *p1 = 'W';  // 错误,不能通过p1修改其所指向的内容
p1 = "World";  // 正确,指针p1可以指向其他字符串
  • char * const p
    • 这是一个常量指针,指针本身是常量,一旦初始化后,不能再指向其他地址。但指针所指向的内容(即字符)是可以修改的(前提是指向的不是const修饰的字符)。
    • 例如:
char str[] = "Hello";
char * const p2 = str;
*p2 = 'W';  // 正确,可以修改p2所指向的内容
// p2 = "World";  // 错误,p2是常量指针,不能再指向其他地址
  1. 字符串操作场景下的应用方式
    • const char *p的应用
      • 当你只需要读取字符串内容,而不希望对其进行修改时使用。例如在函数参数中,如果函数只是对传入的字符串进行读取操作,使用const char *作为参数类型可以保证函数不会意外修改字符串内容。
void printString(const char *str) {
    while (*str) {
        std::cout << *str;
        str++;
    }
    std::cout << std::endl;
}
  • char * const p的应用
    • 当你希望固定指针指向某个字符串,并且需要对该字符串进行修改时使用。比如在一些字符串处理函数中,需要对传入的字符串原地进行修改操作,并且不希望指针指向其他地方。
void reverseString(char * const str) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
}