首页 > 其他分享 >一步到位:指针与const关键字

一步到位:指针与const关键字

时间:2022-08-14 19:56:56浏览次数:48  
标签:限定 const pt 10 int 关键字 一步到位 指针

const关键字为C++/C中的关键字,const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。这个常类型可以是指针,也可以是int等变量。

const的用法常见有以下四种:

const int n = 10;//限定整型变量n的值为10
const int *pt = &n;//限定pt指针的指向关系允许修改,当通过地址修改n值时不允许
int *const pt = &n;//限定pt指针的指向关系不允许修改,当通过地址修改n值时允许
const int *const pt = &n;//即限定指向关系,也限定指向n时只读

对于第一种用法我们不做讲解,我们来逐步演示后续几种const的作用:

int n = 10;
int* pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;

步骤一:此时可以修改变量n的值,但是const 指针pt后,编译器提示错误:

int n = 10;
const int* pt = &n;
cout << "n value:" << n << endl;
*pt = 20;//const后,此操作错误
cout << "n value:" << n << endl;

步骤二:这是因为const指针pt后编译器讲不允许通过pt指针修改,但是可以通过其他指针修改,比如:

int n = 10;
const int* pt = &n;//限定指针
int* pm= &n;//限定指针
cout << "n value:" << n << endl;
*pm = 20;//可以通过其他指针修改
cout << "n value:" << n << endl;

步骤三:我们更进一步,讲const的用法高级一下:

int n = 10;
int* const pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;

此时仍然可以修改n的值,这是为什莫呢?
因为步骤一、二中我们const限定的是*pt这个指针,但是此时我们限定的是pt的内存地址,而不是指针pt,只要在初始化时int* const pt = &n,那么就可以修改n的值。这里其实大家也就明白了,此时如果我们去修改pt内存地址,肯定是不允许的,比如;

int n = 10;
int m = 20;
int* const pt = &n;
cout << "n value:" << n << endl;
*pt = 20;
cout << "n value:" << n << endl;
pt = &m;//修改pt的内存地址是不允许的

到这里我们总结一下步骤一、二、三中的const的区别:

int* const pt = &n://只限定了指向关系,指向对象n时可以修改n
const int* pt = &n;//只限定了指向对象n时只读n,但是指向关系没有限定

 最后,我们来看第四种用法,其实就是第二种和第三种用法累加:

int n = 10;
int m = 20;
const int* const pt = &n;
*pt = 20;//不可以修改n值
pt = &m;//不可以修改指向关系,也就是pt的地址值
cout << "n value:" << n << endl;
cout << "n value:" << *pt << endl;

标签:限定,const,pt,10,int,关键字,一步到位,指针
From: https://www.cnblogs.com/YiMo9929/p/16586149.html

相关文章

  • const char* , char const* 和char * const之间有区别吗?
     最近在看C语言代码时碰到了这个问题,结合查找的资料对这C的知识点做了一下小结。写了一份测试它们的代码。test1函数穿了一个char*const的指针,如果对它增加,会报错,它是只......
  • 静态函数和非静态函数, 以及static关键字
    【1】C++类中静态变量理解1)类里static变量特点:1、属于类本身,不属于对象2、程序的运行过程中只有一个副本3、不能在生成对象时初始化,即不能在构造函数中初始化2......
  • this关键字的指向
    this关键字的指向1.方法中的this,指向调用方法的对象2.全局环境下指向全局对象3.全局函数中的this,指向全局对象4.内部函数中的this,指向全局对象5.时间中的this,指向触发......