随笔 - 143  文章 - 0  评论 - 23  阅读 - 125万

指针和const限定符

1,指向const对象的指针

const double *cptr;    //cptr may point to a double that is const

这里cptr是一个指向double类型的const对象的指针,const限定了cptr指针所指向的对象,而非cptr本身。也就是说cptr本身并不是const。在定义时不需要对他进行初始化允许给cptr重新赋值,使其指向另一个const对象。但不能通过cptr修改其所指对象的值

const double pi = 3.14;

cptr = π

*cptr = 42;        //error:*cptr might be const

const double x = 2.3.;

cptr = &x          //ok

意外收获:声明指针后,如果当时没有给指针赋初值,那么过后只能通过迅地址符,通过指针本身赋值,像下面*in = a;这样是非法的。

int a = 0;
int b = 1;
int *in;
//*in = a;
in = &a;
cout<<*in<<endl;

允许把非const对象的地址赋给指向const对象的指针,但是不能把一个const对象的地址赋给一个普通的,非const对象的指针

const double *cptr;

double daval = 3.147;

cptr = &daval;              //ok

 

const double pi = 3.14;

double *ptr = &pi;          //error

const double *cptr = &pi;   //ok

于是这里有一个问题,本来cptr这种指针,可以改变其指向的地址,但不能通过这个指针修改其指向的对象。但如果他指向的是一个非const类型的对象,那么该对象通过其他指向他的非cptr这种类型的指针是可以改变其值的,这也是一种修改的途径。ps:小困扰了我一下。

可以把指向const的指针理解成:自以为指向const的指针

double dval = 3.14;

const double *cptr = &dval;

*cptr = 2.07;               //error

double *ptr = &dval;

*ptr = 2.07;

cout<<*cptr<<endl;          //prints 2.07

 

2,const指针

int errNumb = 0;

int *const curErr = &errNumb;   //curErr is a constant pointer

curErr是指向int型对象的const指针。

const指针不能使其指向其他对象,但是可以使用该指针修改它所指向对象的值。

const指针必须在定义时候初始化

 


posted on   cbwcwy  阅读(568)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2012年2月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示