#include <iostream>
using namespace std;
void f1(int){}
void f2(int&){}
void f3(int*&){}
int main()
{
int a[2][2]={1,2,3,4};//a[i]实际上是第i+1行的首地址,且为常量指针
const int*p1=&a[1][1];
int const*p2=&a[1][1];//这两种方法都是声明一个常量指针
int*const p3=&a[1][1];//此方法用于声明指针常量
const int b=2;
f1(b);
// f2(b);//思考:为什么f1合法,而f2非法
int t[2]={1,2};
// f3(t);//由于t为一指针常量,故不能引用传递
int p=int(&b);
int*p4=(int*)p;
*p4=8;
cout<<&b<<" "<<p4<<endl;//奇怪?明明是同一个地址,为什么具有两个不同的值呢?难道放入不同编址的存储器
cout<<*p4<<" "<<b<<endl;
}