C++-const指针为何可以接受不同于自己的其它类型的值呢?

意见反馈 意见反馈 主题:991 回复:2082

C++-const指针为何可以接受不同于自己的其它类型的值呢?

瑾兮 发布于 2016-12-26 字数 0 浏览 1106 回复 4

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(4

泛泛之交 2017-09-13 4 楼

肯定是用了类型转换,不管什么类型的指针,都是一个4个字节类型的,所存储的值是内存中的地址,指针的类型只是为了指针操作的方便,比如int型指针p,在执行 ++p 操作时,编译器在编译这条语句时,会定义为增加4个字节。

想挽留 2017-06-10 3 楼

你的意思应该是可以把非const型的值赋值给const型的指针吧!我们经常是如果不想通过此指针来修改这个对象的时候,就这样做。
const 修饰的变量所谓的常量属性是由编译器保证的。

const int *pic=&i;

这里意味着编译器不允许你通过指针Pic修改i的值。但是我们可以直接修改这个非const类型的变量i,因为i本身就没有所谓的常量属性。

但是不可以把一个const对象赋值给一个非const指针,因为这样可能会通过这个指针改变指向对象的值,但也存在使这种操作通过的合法化写法,使用类型强制转换可以通过指针改变const对象:

const int r=100;
int ptr = const_cast<int>(&r); //C++标准,C语言使用:int ptr =(int)&r;

偏爱自由 2017-04-04 2 楼

强制类型转换

不安全 但是的确可以实现 c++语法定义了 静态转换 动态转换 以及去除const属性的转换
如果要得到题目的效果 需要先去掉const属性 然后再强制动态转换 具体用法你可以搜一下
会有不一样的收获

我就不写出来了 希望帮到你了

用老式的c API转换也可以 指针前面加上(要转换的类型)注意 括号在c里只能向前面那样 而c++则可以像函数那样 扩在指针上面

归属感 2017-02-07 1 楼

const修饰指针和引用分三种情况,即const修饰指针、const修饰引用和const修饰指针的引用。

const修饰指针本身。
在这种情况下,指针本身是常量,不能改变,任何修改指针本身的行为都是非法的。
const修饰指针指向的变量(或对象)。
在这种情况下,指针本身可以改变,但const所修饰的指针所指向的对象不能被改变。

你的题目中,const指针是这种类型的话是可以接受其它类型值的。
<coding-1 lang="as">
double pi = 3.1415;
const double* PI = &pi;

double alpha = 3.14;
PI = alpha; // 错误。因为PI所指向的内容是常量,因此PI不能被改变。
PI = &alpha; // 正确。虽然指针所指的内容不能被改变,但指针PI本身可改变。从而通过这种方式改变*PI。
</coding>
const修饰指针本身和指针所指向的变量(或对象)。
在这种情况下,指针本身和指针指向的变量(或对象)均不能被改变。