语法格式: const 类型名 常量名=常量值(表达式);
作 用: 定义时初始化,之后不可修改,不可以函数返回值进行初始化.const修饰符可以保证程序的健壮性.const可译作"只读".合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现.
使用方法: const修饰符常和指针联合使用.const 是一个左结合的类型修饰符,它与其左侧的类型修饰符合为一个类型.切记,当const放在指针符*左侧,则表示修饰的是指针内容.当const放在指针符*右侧,则表示修饰的是指针本身.注意,若某变量使用const修饰后,编译器会查找该变量在应用程序中是否发生变化,若变化,则编译器会报错.
1、指向常量的指针变量
如: char name[] = "lishuai";
const char *p_name = name; 或 char const *p_name = name;
修饰符const放在指针符*的左侧,表示指针内容不可变,即用户不能改变字符串"lishuai"或"yanzi"的内容.
p_name[2] = 'a'; //错误(原因:改变了指针所指向的内容),无法通过编译
p_name = "beijing" //正确(原因:改变了指针的值),最后输出:"beijing"
2、常量指针
如: char name[] = "lishuai";
char * const p_name = name;
修饰符const放在指针符*的右侧,表示指针本身不可变,即用户不能改变指针p_name的值.
p_name[2] = 'h'; //正确(原因:改变了指针所指向的内容),最后输出:"lihhuai"
p_name = "yanzi"; //错误(原因:改变了指针的值),无法通过编译
在该例程中,本来变量p_name是可变的,但由于const的修饰,而变为定值.
3、指向常量的常量指针
如: char name[] = "lishuai";
const char * const p_name = name;
在指针符*的左右两侧均有修饰符const,表示指针本身和指针所指向的内容均不可变.
p_name[2] = 'a'; //错误(原因:改变了指针所指向的内容),无法通过编译
p_name = "beijing" //错误(原因:改变了指针的值),无法通过编译
【attention】
const int a; a是一个常整型数
int const a; a是一个常整型数
const int *a; a是一个指向常整型数的指针
int * const a; a是一个指向整型数的常指针
int const * a const; a是一个指向常整型数的常指针
前两个的作用是一样,a是一个常整型数.
第三个意味着a是一个指向常整型数的指针(整型数是不可修改的,但指针可以).
第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的).
最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的).
{
const int i = var;
//for(i=var;i>0;i--); //编译错误
var = 10;
//i = 100; //编译错误
}
{
int i = 5;
delay(5);
}