1、const char * 、char const *
这两者是等价的。当我们使用char const *定义一个指针变量时,我们可以使这个指针变量指向别的char型的变量,但不能通过指针来修改这个char的值。但是可以使这个指针指向别的变量。例如:
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
char str[] = "I Love China!";//定义一个字符串数组
const char *p1;
char const *p2;
char *p3;
p1 = str;
p2 = str;
p3 = str;
//*p1 = 'Y';//不合法
//*p2 = 'Y';//不合法
*p3 = 'Y';//合法
*p1++;//合法
*p2++;//合法
*p3++;
cout << str << endl;
return 0;
}
2、char* const
当我们使用char* const 定义一个指针变量时,在定义的时候就要给它初始化,不然编译都不会通过,而且在初始化之后,就不能修改指针的指向了。相当于这个指针只能指向唯一的一个变量,即初始化时的变量。但是我们可以用这个指针修改被指向的变量的值。例如:
int main()
{
char str[] = "I Love China!";
//char* const p;//不合法,在定义时就要给它赋值
char* const p = str;
*p = 'Y';//合法的,可以通过指针修改变量的值
//p++;//不合法,指针p只能指向唯一的的地址,即数组的首地址
cout << str << endl;
return 0;
}
3、char const *const
这个就是把前两个结合起来。既不能通过p修改变量,也不能指向别的地址。
4、函数形参带const
void func1(const int a)
{
//在函数中不能修改实参的值
//a = 100;//不可以
}
int main()
{
//在形参中加const ,会更加灵活,
//因为在调用时函数时,传入的实参不管是不是const类型都可以。而且可以直接传入一个常量
func1(1);
}