跳到主要内容

简述const char *p和char * const p; 的区别 ?

参考答案:

const char *pchar * const p 在 C 和 C++ 中是两种非常常见的指针声明,但它们表示的含义和用途是有所区别的。

  1. const char *p;

这个声明表示 p 是一个指向 const char 的指针。也就是说,p 可以被重新指向另一个 char 类型的变量,但是通过 p 所指向的 char 类型的变量不能被修改。例如:

const char *p = "Hello, world!";
p = "Another string";  // 这是可以的
*p = 'h';  // 这将导致编译错误,因为试图修改一个 const 对象
  1. char * const p;

这个声明表示 p 是一个 const 指针,指向 char 类型的变量。也就是说,p 一旦被初始化为指向某个 char 类型的变量,就不能再被改变指向其他变量。但是,通过 p 所指向的 char 类型的变量可以被修改。例如:

char str[] = "Hello, world!";
char *const p = str;
p = "Another string";  // 这将导致编译错误,因为 p 是一个 const 指针
*p = 'h';  // 这是可以的,因为 p 指向的 char 变量不是 const

总的来说,const char *p 表示的是指针 p 可以改变,但是它所指向的字符内容不能改变;而 char * const p 表示的是指针 p 一旦指向某个字符,就不能再改变,但是它所指向的字符内容可以改变。这两种类型在编程中都有其用途,例如,当你想保护一个字符串不被修改时,可以使用 const char *p;而当你需要一个始终指向同一内存位置的指针时,可以使用 char * const p