简述const char *p和char * const p; 的区别 ?
参考答案:
const char *p
和 char * const p
在 C 和 C++ 中是两种非常常见的指针声明,但它们表示的含义和用途是有所区别的。
const char *p;
这个声明表示 p
是一个指向 const char
的指针。也就是说,p
可以被重新指向另一个 char
类型的变量,但是通过 p
所指向的 char
类型的变量不能被修改。例如:
const char *p = "Hello, world!";
p = "Another string"; // 这是可以的
*p = 'h'; // 这将导致编译错误,因为试图修改一个 const 对象
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
。