初学c++问题,老师上课出现的问题,关于const
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
const int a = 10;
const int *p = &a;
int *q = const_cast<int *>(&a);
*q = 20;
cout<<"a:"<<a<<endl<<&a<<endl;
cout<<"*p:"<<*p<<endl<<p<<endl;
cout<<"*q:"<<*q<<endl<<q<<endl;
return 0;
}
这里输出
a=10
,
*p=20
,
*q=20
;&a,p,q指向同一地址
我又定义了一个指针指向上述地址,值也为20
让我不理解同一地址的值为何不同,a为什么=10而*p的值改变了
我在a前面加上volatile修饰,然后输出a和q的值和地址,a=20了,但是地址却=1
这是老师上课出现的问题,他也不能给我们解答,希望在这里得到答案,先谢谢大家了
似曾水模样
10 years, 11 months ago
Answers
1、
*q = 20
后,改变了&a的值,但在
cout<<a;
时,是直接输出的10;这个有点像宏。
2、volatile 修饰a后,每次取值a时都会去内存中读取。
3、iostream没有对应的
operator<<(volatile void*)
。
当 cout<<&a 时,因为 &a 的类型是
volatile int *
,没有对应的
operator<<(valatile int*)
。重载解析选中的是 operator
<<(std::_Bool)
,VS编译时会有警告。又因为它们都不是空指针,所以总是true, 所以输出总是1。
追梦的圣魔导
answered 10 years, 11 months ago