C++中引入关键字const.我们一般认为是“常的”。而这种“常的”可以增加程序的安全性、可读性、可维护性。
1、普通变量与const——符号常量
在C语言中采用编译命令: #define PI 3.14 就是定义符号常量PI,其值是3.14.内部执行机制是编译前进行替换,不通过编译器的语法检查,容易引入错误。
在c++中上面的形式是:const float PI=3.14。与编译命令不同,此定义常量的方法是正常语句,不是预编译命令,需要通过编译器的编译,提高了程序的安全性。
一、定义形式相同
符号常量
#include<iostream>
using namespace std;
void main()
{
const int x=10;
//与上面的定义等价:int const x=10
char const name[]="小小小";
//x=10,进行赋值提示错误
//cin>>name;同样出错
cout<<x<<'\t'<<name<<endl;
}
符号引用常量
#include<iostream>
using namespace std;
void main()
{
int x=10;
int y=22;
int z=23;
int rz=z;
cout<<"z="<<z;
cout<<"rz="<rz;
rz=23;
cout<<"rz=";
const int &rx=x;
int const &ry=y; //两种定义方式相同
cout<<"x="<<x<<'\t'<<"rx="<<rx<<endl;
x=100;
cout<<"x="<<x<<'\t'<<"rx="<<endl;
cout<<"y="<<y<<'\t'<<"ry="<<endl;
//rx=200,赋值出错
}
小解:引用常量不可以通过改变引用改变它所“应用的变量的值”。
2、符号常量指针与符号指针常量有区别
1)const<类型名>*<指针变量名>
如:const int *p;
我们常常定义这种形式为“符号常量的指针变量”。
#include<stdlib.h>
using namespace std;
void main()
{
int x = 10;
int y = 20;
const int *p;
p = &x;
cout << "x=" << x << '\t' << "*p" << *p << endl;
x = 200;
cout << "x=" << x << '\t' << "*p" << *p << endl;
/*//*p = 230;出错无法通过*p改变x的值
cout << "x=" << x << '\t' << "*p" << *p << endl;*/
p = &y;
cout << "y=" << y<< '\t' << "*p" << *p << endl;
const int z = 40000;
p = &z;
cout << "z=" << z << '\t' << "*p=" <<*p<< endl;
}
小解:常量指针是一个指针变量,它可以指向相应类型的不同变量,无法通过该指针变量的取*运算修改他所指向的变量值。
2)<类型> * const<指针常量名>=&<以定义的同类型变量>
我们常叫做符号指针常量
#include<iostream>
#include<stdlib.h>
using namespace std;
void main()
{
int x = 10;
int y = 20;
int *const p = &x;
cout << "x=" << x << '\t' << "*p=" << *p << endl;
x = 200;
cout << "x=" << x << '\t' << "*p=" << *p << endl;
*p = 2200;//可以通过指针常量改变它所指向的变量的值
cout << "x=" << x << '\t' << "*p=" << *p << endl;
//p = &y; 试图将指针常量指向另一个变量,编译通不过
//cout << "y=" << y<< '\t' << "*p" << *p << endl;
system("pause");
}
小解:通过该指针常量取*运算修改它所指向 的 变量值,但是不允许该指针常量指向另一个变量或常量。