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

发布于 2016-12-26 20:19:59 字数 0 浏览 1248 评论 4

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(4

泛泛之交 2017-09-13 02:27:36

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

想挽留 2017-06-10 13:32:39

你的意思应该是可以把非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 08:32:14

强制类型转换

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

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

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

归属感 2017-02-07 22:10:31

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

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

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文