首页 > 代码库 > const 指针的三种使用方式

const 指针的三种使用方式

///////////////////////const 指针的三种状态/////////////////////

注意:const 的前后顺序
const 在类型之前 ---可以修改指针包含的地址,不能修改指针指向的值
const 在变量之前类型之后 ---可以修改指针的指向值,不能修改指针地址

 

 

// 1.指针指向的数据为常量,不能修改,但是可以修改指针包含的地址

/*
int HoursInDay = 24;
const int* pInteger = &HoursInDay;

cout<<HoursInDay<<" "<<*pInteger<<endl;

//*pInteger = 55; //不能通过指针修改指向的值

cout<<HoursInDay<<" "<<*pInteger<<endl;

int MonthsInYear = 12;
pInteger = &MonthsInYear; //可以修改指针指向的地址

//*pInteger = 13;

//int *pAnotherPointerToInt = pInteger; //指针的类型不同不能用于拷贝

*/


//2.指针包含的地址是常量,不能修改,但可以修改指针指向的数据

/*
int DaysInMonth = 30;
int* const pDaysInMonth = &DaysInMonth;

*pDaysInMonth = 31; //Ok! value can be change

int DaysInLunarMonth = 28;
//pDaysInMonth = &DaysInLunarMonth; Cannot change address!
*/


//3.指针包含的地址以及它指向值都是常量,不能修改(这种组合最为严格)

/*
int HoursInDay = 24;

const int* const pHoursInDay = &HoursInDay;

//*pHoursInDay = 25; cannot change pointed value 不能修改指向的值

int DayInMonth = 30;

//pHoursInDay = &DayInMonth; cannot change pointer value 不能修改指针
*/

 

将指针传递给函数时,这些形式的const很有用。函数参数应声明为最严格的const指针,以确保函数不会修改指针指向的值。这让函数更容易维护,在时过境迁和人员更换尤其如此。

 

 

void CalcArea(const double* const pPi,        //const pointer to const data
                    const double* const pRadius, //i.e.. nothing can be changed
                    double* const pArea              //change pointed value,not address
                   )
{
       //check pointers before using!
       if (pPi && pRadius &&pArea)
      {
          *pArea = (*pPi) * (*pRadius) *(*pRadius);
      }
}


int main()
{
const double PI = 3.14;

cout << "Enter radius of circle: ";
double Radius = 0;
cin >> Radius;

double Area = 0;
CalcArea(&PI,&Radius,&Area);

cout << "Area is = "<<Area<<endl;
}