鱼C论坛

 找回密码
 立即注册
查看: 1700|回复: 11

[已解决]指针和常量的一点问题

[复制链接]
发表于 2021-1-20 23:01:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>

int main()
{
        const int a{ 1000 };
        const int b{ 2000 };
        int* ptr{ (int*)&a };
        *ptr = 5000;

        std::cout << "ptr的值:"<<*ptr<<std::endl;
        std::cout << "ptr的地址:" << &ptr << std::endl;
        std::cout << "a的值:" << a;
        std::cout <<  "\na的地址:" << &a;
        std::cout << std::endl;
         
}

求解:为什么*ptr的值是5000,而a的值依然是1000
最佳答案
2021-1-20 23:14:21
a是常量啊
ptr的初值时a(初始指向a的地址)
但是*ptr = 5000;后就不是了啊(值不同了但ptr的地址没变)
a一个常量不会随着指针的值的修改而修改
#include<iostream>

int main()
{
        const int a{ 1000 };
        int* ptr{ (int*)&a };
        std::cout << "ptr的值:" << *ptr << std::endl;  //加这两行
        std::cout << "ptr的地址:" << &ptr << std::endl;
        *ptr = 5000;

        std::cout << "ptr的值:" << *ptr << std::endl;
        std::cout << "ptr的地址:" << &ptr << std::endl;
        std::cout << "a的值:" << a;
        std::cout << "\na的地址:" << &a;
        std::cout << std::endl;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-20 23:14:21 | 显示全部楼层    本楼为最佳答案   
a是常量啊
ptr的初值时a(初始指向a的地址)
但是*ptr = 5000;后就不是了啊(值不同了但ptr的地址没变)
a一个常量不会随着指针的值的修改而修改
#include<iostream>

int main()
{
        const int a{ 1000 };
        int* ptr{ (int*)&a };
        std::cout << "ptr的值:" << *ptr << std::endl;  //加这两行
        std::cout << "ptr的地址:" << &ptr << std::endl;
        *ptr = 5000;

        std::cout << "ptr的值:" << *ptr << std::endl;
        std::cout << "ptr的地址:" << &ptr << std::endl;
        std::cout << "a的值:" << a;
        std::cout << "\na的地址:" << &a;
        std::cout << std::endl;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-20 23:18:40 | 显示全部楼层
昨非 发表于 2021-1-20 23:14
a是常量啊
ptr的初值时a(初始指向a的地址)
但是*ptr = 5000;后就不是了啊(值不同了但ptr的地址没变)
...

*ptr直接操作内存空间的.....前面用了强制转换.........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-20 23:24:51 | 显示全部楼层
2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........

强制转换是因为常指针不能初始化整形指针啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-20 23:47:02 | 显示全部楼层
2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........

而且常量铁打不动,要改它,指针也不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 09:27:51 | 显示全部楼层
*ptr=5000只是指针ptr指向改变了,a是常量不会发生改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 12:01:48 | 显示全部楼层
chxchxkkk 发表于 2021-1-21 09:27
*ptr=5000只是指针ptr指向改变了,a是常量不会发生改变

那么ptr指向了哪里喃?比如和数组一样有个偏移,但是这就涉及了越界,会影响其他数据把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 12:02:32 | 显示全部楼层
昨非 发表于 2021-1-20 23:47
而且常量铁打不动,要改它,指针也不行啊

数据是可以改变的哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 12:56:28 | 显示全部楼层
2736946915 发表于 2021-1-21 12:02
数据是可以改变的哦

能否举个例子,你指的是如何改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 15:33:18 | 显示全部楼层
昨非 发表于 2021-1-21 12:56
能否举个例子,你指的是如何改

图中的指针指向常量,输出数据改变了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 15:38:07 | 显示全部楼层
2736946915 发表于 2021-1-21 15:33
图中的指针指向常量,输出数据改变了

ptr不是常量指针(指向常量的指针)啊,它的类型是int*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 00:05:58 | 显示全部楼层
2736946915 发表于 2021-1-21 12:01
那么ptr指向了哪里喃?比如和数组一样有个偏移,但是这就涉及了越界,会影响其他数据把

ptr指向了5000的地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表