肯定是用了类型转换,不管什么类型的指针,都是一个4个字节类型的,所存储的值是内存中的地址,指针的类型只是为了指针操作的方便,比如int型指针p,在执行 ++p 操作时,编译器在编译这条语句时,会定义为增加4个字节。
你的意思应该是可以把非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;
强制类型转换
不安全 但是的确可以实现 c++语法定义了 静态转换 动态转换 以及去除const属性的转换如果要得到题目的效果 需要先去掉const属性 然后再强制动态转换 具体用法你可以搜一下会有不一样的收获
我就不写出来了 希望帮到你了
用老式的c API转换也可以 指针前面加上(要转换的类型)注意 括号在c里只能向前面那样 而c++则可以像函数那样 扩在指针上面
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修饰指针本身和指针所指向的变量(或对象)。在这种情况下,指针本身和指针指向的变量(或对象)均不能被改变。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
肯定是用了类型转换,不管什么类型的指针,都是一个4个字节类型的,所存储的值是内存中的地址,指针的类型只是为了指针操作的方便,比如int型指针p,在执行 ++p 操作时,编译器在编译这条语句时,会定义为增加4个字节。
你的意思应该是可以把非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;
强制类型转换
不安全 但是的确可以实现 c++语法定义了 静态转换 动态转换 以及去除const属性的转换
如果要得到题目的效果 需要先去掉const属性 然后再强制动态转换 具体用法你可以搜一下
会有不一样的收获
我就不写出来了 希望帮到你了
用老式的c API转换也可以 指针前面加上(要转换的类型)注意 括号在c里只能向前面那样 而c++则可以像函数那样 扩在指针上面
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修饰指针本身和指针所指向的变量(或对象)。
在这种情况下,指针本身和指针指向的变量(或对象)均不能被改变。