========================================================================
简单来说,const 就是把某一对象设置为常量类型,如字符常量,数组常量,或是指针常量等。那么为什么要
这么做呢?其实很简单,就是防止其被修改,避免造成严重的后果。下面我们对不同的情况作简单论述:
1、字符常量
#include <stdio.h>
//#define number 5
//此语句功能相当于 const int number = 5;
int main(void)
{
const int number = 5; //将number设置为int型的常量,其只能被调用,不能被修改
//下面语句是错误的,number是常量,不能被赋值修改
//number = 10;
printf("number is %d.\n", number);
return 0;
}
#include <stdio.h>
#define SIZE 5
int main(void)
{
const int array[SIZE] = { 1, 2, 3, 4, 5 }; //将array[]声明为int型数组常量,其中SIZE为符号常量
//诸如下述任何改变数组值的操作都是不允许的
//array[0] = 10;
for (int i = 0; i < SIZE; i++)
printf("%d ", array[i]);
putchar('\n');
return 0;
}
3、指向常量的指针
#include <stdio.h>
#define SIZE 5
int main(void)
{
const int array[SIZE] = { 1, 2, 3, 4, 5 };
//定义pi为指向const int数值的指针
const int *pi;
pi = array; //数组名即数组地址
printf("*pi = %d\n", *pi);
//由于pi指向const int型数据,而const int型数据又不能被修改,所以下述语句不允许
//*pi = 10;
//虽然通过pi不能修改指向的数据,但能修改其指向的地址
pi++;
printf("*pi = %d\n", *pi);
return 0;
}
4、指针常量
#include <stdio.h>
#define SIZE 5
int main(void)
{
int array[SIZE] = { 1, 2, 3, 4, 5 };
//注意const的位置,此pi为指向array[0]的指针,且其地址不能被修改
//注意,对于指针常量,必须在声明时就赋值,如下所示
int * const pi = array;
printf("*pi = %d\n", *pi);
//不能修改指针指向的地址,但可以修改其指向的值
//pi++; //不允许
*pi = 10; //允许
printf("*pi = %d\n", *pi);
return 0;
}
5、指向常量的指针,同时其自身又是常量
#include <stdio.h>
#define SIZE 5
int main(void)
{
const int array[SIZE] = { 1, 2, 3, 4, 5 };
//pi指向const int数据,且其本身的值也是一个常量
const int * const pi = array;
printf("*pi = %d\n", *pi);
//既不能修改指针指向的地址,也不能修改其指向的值
//pi++; //不允许
//*pi = 10; //不允许
//printf("*pi = %d\n", *pi);
return 0;
}
总结:
const 可以被很好的用来保护数据,若程序中某一对象不能被修改,那么尽可能的将其设置为const 类型