- 区别
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是常量指针,不能再指向其他地址
- 字符串操作场景下的应用方式
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;
}
}