在普通指针类型前面,加上const修饰
比如:

const int *p;
const char *p;
const double *p;

加不加const,有什么区别
(1)不加const

int a=10;
int *p=&a;
*p=11;     //可写
int b=*p;  //可读

(2)加上const修饰

int a=10;
const int *p=&a;
*p=11;   //错误!不可写
int b=*p;  //可读

结论:const的作用是封禁(限制)星号操作里的内存功能
称为:只读ReadOnly,这块内存只能读不能写

用途:
const用于限定函数的参数

int avg(const int *p,int len)
{

}

用于显示地指定:该参数是输入参数,在函数里只是读取这个内存,而不会修改这个内存的值。
当你不需要修改内存时,在指针前面加const修饰,避免一不小心的错误发生。

注意事项:const用于限定函数的参数

int avg(const  int * p, int len)
{
    for(int i=0;i<len;i++)
    {
    priintf("%d\n",*p);   //可以读
    p=p+1;   //没问题
    }

}

const只是封禁的是星号操作,不允许写内存,但对于普通的指针加减是没关系的。