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;
}