Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常
类型的变量或对象的值是不能被更新的。
Const的作用:
(1)可以定义常量: 即 const int a=5;
a就是一个被const修饰的常量,它在程序运行期间是无法被改变的!
(2)保护被修饰的东西: 例如一个函数的首部为 void fn(const int* p)
p是一个指针变量,函数fn接收到的是一个变量的地址,而由于在地址传参时我们可以通过地址改变原本的变量值,而我们如果并不想改变他,我们就可以使用const修饰,这样就可以保护其不被更改!
(3)可以很方便的调整参数:const和宏定义一样,我们可以通过更改const修饰的值,很方便的使程序得出不一样的结果,大大提高了程序的通用性!
Const的使用:
(1)const定义常量:
它的含义是使用const修饰的变量在程序运行期间是无法被改变的。
例如 const int a=5;
a在程序运行过程中不允许被改变。
(2)在使用指针时使用Const:
const修饰一级指针
const char p
限定变量p为只读。这样如p=2这样的赋值操作就是错误的。const char *p
p为一个指向char型数据的指针,const只限定了p所指向的对象无法被改变,这样说来,p=&a或p++等操作都是合法的,而如果是 p=1,这样的操作就是错的,因为这样子是妄图修改常量。
3.char * const p
const在p前面,这样子表示指针变量p是被const修饰的,p是不能被更改的,所以&p=a,p++等操作都是不合法的,但是p=1这种操作是合法的。
4.const char * const p
char前面与p前面全部都有const,所以p是不能更改的,p也是不能被更改的。
const修饰二级指针
1.const char **p
p是一个指向指针的指针,而const在char前面,说明const只修饰最终的对象,即**p=5是非法的,而p=&p1或者p++这些操作都是合法的。
2.const char * const *p
const修饰了char 也修饰了*p,所以只有p++这种操作是正确的,像**p=3或者 *p=&p1这种操作都是错误的。const char* const* const p
const修饰了char 也修饰了* 也修饰了p所以p++,**p=3或者 *p=&p1这种操作都是错误的。全部关于p,*p,**p的操作都是非法的。
(3)在函数参数中使用const:
char* strcopy(char* dest,const char* src)
{
char* temp=dest;
if(dest==NULL||src==NULL)
return ;
while(*dest++=*src++);
return temp;
}
int main()
{
char s[100];
char s1[]="tom & jerry";
char *p=NULL;
p=s1;
strcopy(s,p);
}
这是一个可以实现链式表达式的字符串复制函数
我们可以看到这个函数的函数首部为 char* strcopy(char* dest,const char* src)
因为我们需要传递字符串,所以需要传递他的地址,但我们又不想改变字符串的原本的值,所以使用了const修饰了对应的字符串指针,如此一来他的值就无法被改变。