1.const修飾變量
1.1 先搞清楚四個概念:
常量:值不可以修改。(不可改)
指針常量:即指針不可改變指向,但是可以改當前指向內存的內容。(可改不可動)
指向常量的指針:雖然說指向常量,實際指向的數據可以通過賦值語句修改,只是不可以通過該指針修改內容,屬於“只讀”指針,當然指針可以改變指向。(可動不可改)
指向常量的指針常量:指針不可以改變指向,也不可以修改當前指向內存的內容。(不可動不可改)
1.2 寫法規則
const修飾變量時:
(1)只有一個const,如果const位於*左側 --> 指向常量的指針
(2)只有一個const,如果const位於*右側 --> 指針常量
(3)兩個const,*左右各一個 --> 指向常量的指針常量
int i = 5;
// 常量
const int c = 99;
int const d = 99;
//c = 88; //錯
//d = 100; //錯
//指針
int* p1 = &i;
// 指針常量(在指針標識符前加const)
int* const p2 = &i;
//p2 = &c; //錯
*p2 = 2; //對
// 指向常量的指針(把const放到*或者類型之前)
int const* p3 = &i;
const int* p4 = &i;
//const * int a = &i; //不存在,錯誤寫法
p3 = &c; //對
//*p3 = 99; //錯
// 指向常量的指針常量
int const* const p5 = &i;
const int* const p6 = &i;
//p5 = &c; //錯
//*p5 = 100; //錯
2.const修飾函數參數
傳遞過來的參數在函數內也是不可以改變的,例如:
void fun(const int a){
a = 1; //出錯
}
3.const修飾函數返回值
#include<iostream>
using namespace std;
const int *fun() {
int b = 2;
return &b;
}
int main()
{
const int *a = fun();//指向常量的指針,可動不可改
//int *a=fun(); //編譯錯誤,類型必須一致
cout << *a << endl;//2
int c = 88;
a = &c;//可動
//*a = 3;//不可改
cout << *a << endl;//88
return 0;
}