2736946915 发表于 2021-1-20 23:01:08

指针和常量的一点问题

#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;

}

2736946915 发表于 2021-1-20 23:18:40

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

*ptr直接操作内存空间的.....前面用了强制转换.........

昨非 发表于 2021-1-20 23:24:51

2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........

强制转换是因为常指针不能初始化整形指针啊

昨非 发表于 2021-1-20 23:47:02

2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........

而且常量铁打不动,要改它,指针也不行啊

chxchxkkk 发表于 2021-1-21 09:27:51

*ptr=5000只是指针ptr指向改变了,a是常量不会发生改变

2736946915 发表于 2021-1-21 12:01:48

chxchxkkk 发表于 2021-1-21 09:27
*ptr=5000只是指针ptr指向改变了,a是常量不会发生改变

那么ptr指向了哪里喃?比如和数组一样有个偏移,但是这就涉及了越界,会影响其他数据把

2736946915 发表于 2021-1-21 12:02:32

昨非 发表于 2021-1-20 23:47
而且常量铁打不动,要改它,指针也不行啊

数据是可以改变的哦

昨非 发表于 2021-1-21 12:56:28

2736946915 发表于 2021-1-21 12:02
数据是可以改变的哦

能否举个例子,你指的是如何改

2736946915 发表于 2021-1-21 15:33:18

昨非 发表于 2021-1-21 12:56
能否举个例子,你指的是如何改

图中的指针指向常量,输出数据改变了

昨非 发表于 2021-1-21 15:38:07

2736946915 发表于 2021-1-21 15:33
图中的指针指向常量,输出数据改变了

ptr不是常量指针(指向常量的指针)啊,它的类型是int*

chxchxkkk 发表于 2021-1-23 00:05:58

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

ptr指向了5000的地址
页: [1]
查看完整版本: 指针和常量的一点问题