专业编程基础技术教程

网站首页 > 基础教程 正文

C++ const 类型常指针,有多少种方式?归纳、总结 linux C++第5讲

ccvgpt 2024-08-08 12:56:27 基础教程 17 ℃

(2) const 紧跟在指针类型的后面,例如:

const char* pstr = " mylinux.vip ";//定义pstr指针变量,指向一串字符串

C++ const 类型常指针,有多少种方式?归纳、总结 linux C++第5讲

就是 const 后面紧接着 char,所以,const 修饰的是 char,那么,char 表示 pstr 指向的内容,所以,定义了 pstr 指向的内容是常量,所以,不可以修改 pstr 指向的内容。如下是测试的例子:

可以看到pstr指向的数据是只读类型,不可以修改pstr指向的数据。

但是,pstr指针变量存放的数据不是只读类型,可以修改pstr存放的地址值。测试例子如下:

可以看到,pstr指向了新的字符串“www”,所以,可以修改指针变量pstr存放的数据。但是,不可以修改pstr指向的数据。

如下是一个分析的例子:

int a = 30; //定义int类型变量a,并设置30这个数值;

const int* p = &a;//定义指针类型变量p,指向变量a;而且,指针变量p是常类型;

所以,const关键字后面跟着int类型,所以,修饰指针p 指向的内容int 是一个常量,不可以修改,所以,不可以修改指针p指向的数据。所以,如下的执行是错误的:

*p = 6; //错误,因为,p 指向的内容是一个常量,不可以修改

测试代码如下:

可以看到,在第10行代码,执行:*p = 6; 的语句是错误的,因为,*p是一个read only属性,指针变量p指向的数据是一个“只读”类型,所以,不可以修改指针变量p指向的数据。

在上面的例子中,指针变量p指向变量a。所以,不可以通过指针p来修改变量a的数据。

所以,*p是对指针变量p降级,转换成它所指向的变量a。那么,给*p赋值,就是给指针变量p指向的变量a赋值。所以,是不允许的!

但是,指针p 存放的地址值是可以修改的,如下:

int b = 10;

p = &b; //正确,可以修改p 存放的地址值;

此时,修改指针p存放的变量地址。如下是程序测试例子:

可以看到,上面的例子,定义指针变量p指向的存储空间是const类型,所以,不可以修改指针变量p指向的空间。

但是,指针变量p存储的数据(地址值),不是const类型,所以,可以修改指针变量p存储的数据。那么,上面的代码,修改指针变量p的值,指向变量b的地址。最终,输出指针变量p指向内存的数据,就是变量b中的数据。

如果我们想定义指针变量p,不可以修改它指向的内存,也不可以修改指针变量p存储的数据?

答案是:可以,我们需要再使用const关键字来修饰指针p,定义如下:

const int* const p = &a;

此时,在指针变量p之前,再添加const关键字,所以,进行了双重保护。表示定义指针变量p是const类型,那么,它存储的数据是const类型,不可以修改。测试例子如下:

可以看到,提示变量p是read only类型,是只读,不可以修改指针变量p存储的数据。

所以,我们可以通过const类型定义“常量”,保护变量中的数据。那么,我们可以归纳总结如下:

(1) const修饰指针变量

例如:char* const p; 此时,const关键字后面跟着指针变量p,所以,修饰指针变量p存储数据。那么,指针变量p存储的数据是常类型,不可以修改指针变量p存储的数据。所以,不可以修改指针变量p存放的地址值。

(2) const修饰指针变量指向的数据

例如:const char* p; 此时,const关键字后面跟着char类型,所以,修饰指针变量p指向的数据。指针变量p指向一个char类型的数据,所以,定义指针变量p指向的char类型的数据是常量。不可以被修改。

(3) const修饰指针变量和指针变量指向的数据

例如:const char* const p; 此时,使用const关键字进行双重保护。那么,指针变量p存储的地址值是常量,而且,指针变量p指向的char类型的数据也是常量,都不可以被修改。

Tags:

最近发表
标签列表