指针字符串的使用问题
一、直接定义字符串指针的使用注意事项
- 定义字符串指针的时候 const char *, 和字符串本身相同,就不会出现警告
- const char * == char const *,
- 作用:const char * p ,表示的是指针p指向的数值不能修改, 但是可以通过本身自己去修。
- 不能通过指针修改指针对应的数值,但是其对应的数值,可以通过本身修改
二、会出现警告的版本,能正常输出,但是不能修改
int main()
{
char *str = "hellow";
cout << str << endl;
return 0;
}
输出结果
虽然左边是char * 类型,但是无法修改的版本
int main()
{
char *str = "hellow";
str[2] = 'a';
cout << str << endl;
return 0;
}
三、可以修改的版本
int main()
{
char s2[] = "world";
char *p = s2;
*p = 'a';
cout << s2 << endl;
return 0;
}
- 先必须确定右边的字符串放入字符数组中
- 然后才可以修改。
四、关于const char * 使用测试
int main()
{
char s[] = "hellow";
const char *p = s;
cout << p << endl; //输出 hellow
// *(p) = 'f'; //错误:向只读位置赋值
// cout << p << endl;
s[0] = 'f';
cout << p << endl;//输出 fellow
return 0;
}
- const char * 表示 不能修改 指针 指向的 地址的 内容
- 但是地址是可以 改变的, 参照第五条对比
- 但是可以通过本身进行修改
五、char * const
int main()
{
char s[] = "hellow";
char * const p = s;
char s2[] = "good";
// p = s2; //错误:向只读变量‘p’赋值
p[0] = 'f';
cout << p << endl; //fellow
return 0;
}
- 表示 指针p指向的 地址 是 无法改变的
- 至于 指向的 地址 所存放的内容 是可以 改变的
- 可以对比 const char *
int main()
{
char s[] = "hellow";
const char * p = s;
char s2[] = "good";
p = s2;
cout << p << endl; //good
return 0;
}
参照:
1、https://blog.csdn.net/SilentOB/article/details/76994618
【const char * 、char const *、 char * const 三者的区别】