📜  const char * p,char * const p和const char * const p之间的区别(1)

📅  最后修改于: 2023-12-03 15:00:01.701000             🧑  作者: Mango

区别

在C/C++编程中,const char * pchar * const pconst char * const p 这三个声明语句虽然看似相似,但实际上存在着很大的区别。

const char * p

const char * p 定义了一个指向常量字符的指针,也可以说是指针所指向的字符为常量,不可更改。但是指针本身的值是可以改变的。因此,下面的操作都是合法的:

const char * p = "hello";
p = "world";

这段代码中,指针 p 的值被改为了 "world",但是指针指向的字符 "hello" 是不可更改的。如果试图修改指针指向的字符,编译器将会给出错误提示。

char * const p

char * const p 定义了一个指向字符的常量指针,也可以说是指针本身为常量,不可更改,但是指针所指向的字符是可变的。因此,下面的操作都是合法的:

char str[] = "hello";
char * const p = str;
p[0] = 'H';

这段代码中,指针 p 指向了字符数组 str 的首地址,并被声明为常量指针。虽然指针本身不能改变,但是它所指向的字符是可以更改的。因此,通过 p 指针可以修改字符串的内容。

const char * const p

const char * const p 定义了一个指向常量字符的常量指针,也可以说既指针本身为常量,也指向常量字符。这样的指针既不能修改指针本身的值,也不能修改其所指向的字符。因此,这个指针是一个完整的常量,不能被修改。下面是一个例子:

const char * const p = "hello";

这段代码中,指针 p 既指向了常量字符 "hello",同时也被声明为常量指针不能改变。因此,无论是修改指针本身的值还是修改所指向的字符,都会导致编译失败。

总结

三者间的区别可用下图表示: