关键字 const 的几个用法规则:
1. const 可以用来保护 数组元素,例如:void sum(const int arr[], int n)
在函数里面不能对数组元素进行更改
用const定义数组表示数组元素不能进行更改;
例如:const int arr[3] = {1, 2, 3};
arr[2] = 5; // error
所以如果不需要改变数组里面的元素,可以使用const来保护数组
2. 可以用const来创建符号常量,例如:const double PI = 3.14
这样在程序中出现 3.14 的地方都可以用PI来替代
3. 用const定义指针,(主要看const的位置)
例如:int arr[3] = {1, 2, 3};
const int * p1 = arr;
* p1 = 43; // error
// p1指向arr,这样不能通过 * p1 = 43,来改变arr[0],的值,
// 若要改变arr[0],可以arr[0] = 43;
int arr[3] = {4, 5, 6};
int * const pd = arr; // 从此p1 只能指向arr,但是可以通过 *pd 来改变 pd 指向的值
pd = &arr [2]; // error
* pd = 43; // 合法
int arr[3] = {7, 8, 9};
const int * const p2 = arr; // 从此 p2 只能指向arr,并且下面两行代码都是错误的
* p2 = 43; //error
p2 = & arr[1]; //error
4.将常量或非常量者数据的地址赋给指针常量的指针是合法的;
例如:int arr[5] = {89, 98, 45, 56, 35};
const int rates[4] = {1, 2, 3, 4};
const int * pc = arr; // 合法
pc = rates; // 合法
但是普通指针只能指向非常量数据
例如:const int arr[3] = {1, 2, 3};
int rates[3] = {4, 5, 6};
int * pd = rates; // 合法
pd = arr; // 非法
// 这样定义的函数可以接收常量非常量类型数据的地址
void arr_show(const int arr[], int n)
{
// 语句
}
//但是这样定义的函数只能接收常量类型数据的地址
void arr_mult(int arr[], int n)
{
// 语句
}
*****************************************************************************************************************************
参考:《C primer plus》第五版 中文版