指针和常量的一点问题
#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 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;
} 昨非 发表于 2021-1-20 23:14
a是常量啊
ptr的初值时a(初始指向a的地址)
但是*ptr = 5000;后就不是了啊(值不同了但ptr的地址没变)
...
*ptr直接操作内存空间的.....前面用了强制转换......... 2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........
强制转换是因为常指针不能初始化整形指针啊 2736946915 发表于 2021-1-20 23:18
*ptr直接操作内存空间的.....前面用了强制转换.........
而且常量铁打不动,要改它,指针也不行啊 *ptr=5000只是指针ptr指向改变了,a是常量不会发生改变 chxchxkkk 发表于 2021-1-21 09:27
*ptr=5000只是指针ptr指向改变了,a是常量不会发生改变
那么ptr指向了哪里喃?比如和数组一样有个偏移,但是这就涉及了越界,会影响其他数据把 昨非 发表于 2021-1-20 23:47
而且常量铁打不动,要改它,指针也不行啊
数据是可以改变的哦
2736946915 发表于 2021-1-21 12:02
数据是可以改变的哦
能否举个例子,你指的是如何改
昨非 发表于 2021-1-21 12:56
能否举个例子,你指的是如何改
图中的指针指向常量,输出数据改变了 2736946915 发表于 2021-1-21 15:33
图中的指针指向常量,输出数据改变了
ptr不是常量指针(指向常量的指针)啊,它的类型是int* 2736946915 发表于 2021-1-21 12:01
那么ptr指向了哪里喃?比如和数组一样有个偏移,但是这就涉及了越界,会影响其他数据把
ptr指向了5000的地址
页:
[1]