本文由博主SilentOB提供,点击阅读原文即可跳转。
C/C++ 中常见以下三种定义:
本文整理三者之间的区别与联系。
定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。实验如下:ptr指向str,而str不是const,可以直接通过str变量来修改str的值,但是确不能通过ptr指针来修改。
gcc编译报错信息:
注释掉16行ptr[0] = 's';运行正常,运行结果为:
hello world gello world
另外还可以通过重新赋值给该指针来修改指针指向的值,如上代码中取消7、18行的注释,运行结果为:
hello world good game!!
此种写法和const char *等价,大家可以自行实验验证。
定义一个指向字符的指针常数,即const指针,实验得知,不能修改ptr指针,但是可以修改该指针指向的内容。实验如下:
gcc报错信息:
注释掉17行代码运行正常,运行结果为:
hello world sello world
ps:补充一个传值的例子。
#include <iostream>
using namespace std;
void ShowMessage(const char* msg)
{
cout << msg << "\n";
}
int main()
{
const char* p = "大家好";
ShowMessage(p);
char msg[] = "大家好";
ShowMessage(msg);
}