版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_34018840/article/details/89086783
c/c++关于三者的定义方式:
- const char * ptr
- char const * ptr
- char * const ptr
const关键字本身用于它限定一个变量不允许被改变,产生静态作用。
1、const char * ptr / char const * ptr
这两种用法的效果相同,都是用于定义一个指向字符常量的指针。ptr在这里指向 char * 类型常量,即 * ptr 所指向的对象为const,简单理解就是不能通过 * ptr 来修改这个对象,但如果这个对象预先被定义(例如下例所示预先被定义为 str[] 数组形式),那么可以通过其原始定义方式来修改这个对象。但是指针 ptr 本身的值是可以修改的。
测试代码如下:
#include <iostream>
using namespace std;
int main()
{
int i;
char str[] = "hello world";
char sss[] = "goood jobbb";
char const *ptr = str;
//const char * ptr = str'; 上下效果一样
for(i=0; i<11; i++)
cout << ptr[i];
cout << endl;
//ptr[0] = 's'; 报错,提示*ptr为只读对象
//可通过str[]来修改,但是不能通过*ptr
str[0] = 'g';
for(i=0; i<11; i++)
cout << ptr[i];
cout << endl;
ptr = sss;
for(i=0; i<11; i++)
cout << ptr[i];
cout << endl;
}
运行结果如下:
2、char * const ptr
定义了一个指向字符的指针常数,即const指针,ptr本身的值不能被修改(即指针存储的地址是固定的),但是其指向的值可以被修改。
测试代码如下:
#include <iostream>
using namespace std;
int main()
{
int i;
char str[] = "hello world";
char sss[] = "goood jobbb";
char * const ptr = str;
for(i=0; i<11; i++)
cout << ptr[i];
cout << endl;
ptr[0] = 's';
for(i=0; i<11; i++)
cout << ptr[i];
cout << endl;
//ptr = sss; 报错,提示ptr为只读对象
}
运行结果如下: