1、指针常量
#include<stdio.h>
int main()
{
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
double *const prt = rates;
prt = &rates[2] ; //系统报错,不允许
return 0;
}

#include<stdio.h>
int main()
{
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
double *const prt = rates;
*prt = 1.2222 ; //允许
printf("rates[0] = %f\n",rates[0]);
return 0;
}

*运算符是一个指针运算符,prt是一个指针变量,前面加了const,说明prt这个指针指向的地址是一个常量,我们不能修改其指向的地址值,只能修改其地址上面的数值。
2、常量指针
#include<stdio.h>
int main()
{
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
double const (*prt)= rates;
*prt = 333.222 ; //不允许
printf("rates[3] = %f\n",*prt);
return 0;
}

#include<stdio.h>
int main()
{
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
double const (*prt)= rates;
prt = &rates[3] ; //允许
printf("rates[3] = %f\n",*prt);
return 0;
}

const *prt我们可以这么看,const定义的是一个常量参数,所以说*prt指向的地址上面的数值要是常量,不允许被改变,而prt是一个指针变量,则我们可以通过修改地址指其指向另一个地址。
3、指向常量的指针常量
#include<stdio.h>
int main()
{
double rates[5] = {88.99, 100.12, 59.45, 183.11, 340.5};
const double *const prt= rates;
prt = &rates[3] ; //不允许
printf("rates[3] = %f\n",*prt);
return 0;
}
如果在指针常量的前面再加上const,如上所示,表明即不允许prt修改地址的值,也不允许修改地址上面的值。
所以说指针常量是不允许修改指向的地址,允许修改地址上面的值,常量指针是不允许修改地址上面的值,而允许修改指向的地址,第三种指向常量的指针常量即不允许修改地址的值,也不允许修改地址上面的值。
这是C primer plus 第六版本 pdf ,大家有需要的可以去下载,https://xbp.pub/i/ZZ0fb1cc4foMq 还有perl,python,数据分析等一些技能书籍,大家有需要的可以去看看 |