初学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
这是老师上课出现的问题,他也不能给我们解答,希望在这里得到答案,先谢谢大家了

指针 C++

似曾水模样 10 years, 10 months ago

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, 10 months ago

Your Answer