#include"header.h"
void Function1(int aa);
void Function2(const int aa);
void Function3(int *aa);
void Function4(const int *aa);
void Function5(int &aa);
void Function6(const int &aa);
void main()
{
int var1=10;
const int var2=20;
int Arry1[10]={0,1,2,3,4,5,6,7,8,9};
int *per1=&var1;
//int *per4=&var2;//'initializing' : cannot convert from 'const int *' to 'int *'
const int *per2=&var2;
const int *per3=&var1;
int *per5=Arry1;
const int *per6=Arry1;
//const指针能指向const对象也能指向非const对象,而非const对象只能指向非const对象
Function1(var1);
Function1(var2);
//形参:非const对象,实参:非const对象或const对象,函数体可以改变形参的值
Function2(var1);
Function2(var2);
//形参:const对象,实参:非const对象或const对象,函数体不能修改形参的值
Function3(per1);
//Function3(per2);//cannot convert parameter 1 from 'const int *' to 'int *'
//形参:非const指针,实参:只能是非const指针, 函数体可以改变形参所指向对象的值
Function4(per1);
Function4(per2);
//形参:const指针,实参:非const指针或const指针,函数体不能修改形参所指向对象的值
Function5(var1);
//Function5(var2);//cannot convert parameter 1 from 'const int' to 'int &'
//形参:非const引用,实参:只能是非const对象, 函数体可以改变形参所关联对象的值
Function6(var1);
Function6(var2);
//形参:const引用,实参:非const对象或const对象,函数体不能修改引用所关联对象的值
}
void Function1(int aa)
{
aa=100;
cout<<"Function1:"<<aa<<endl;
}
void Function2(const int aa)
{
// aa=100; //error C2166: l-value specifies const object
cout<<"Function2:"<<aa<<endl;
}
void Function3( int *aa)
{
*aa=200;
cout<<"Function3:"<<*aa<<endl;
}
void Function4(const int *aa)
{
// *aa=100; //error C2166: l-value specifies const object
cout<<"Function4:"<<*aa<<endl;
}
void Function5(int &aa)
{
aa=150;
cout<<"Function5:"<<aa<<endl;
}
void Function6(const int &aa)
{
//aa=143;//error C2166: l-value specifies const object
cout<<"Function6:"<<aa<<endl;
}