来自小甲鱼的书籍<<零基础入门学习c语言>>
指向常量的指针
int num = 520;
const int cnum = 880;
const int *pc = &cnum;
printf("*pc = %d,cnum= %d\n",*pc,cnum);
//*pc = 1024; 出错
pc = #
printf("*pc = %d,num= %d\n",*pc,num);
指向常量的指针
如果尝试修改指针pc引用的值(*pc),那么将被告知程序无法通过编译
但如果修改的是指针pc的指向,那么编译器并不会阻止:
常量指针
指向非常量的常量指针
int num = 520;
const int cnum = 880;
int *const p = #
*p = 1024;
printf("*p: %d\n",*p);
//p = &cnum;//这是禁止的
   
指向常量的常量指针
int num = 520;
const int cnum = 880;
const int *const p = &cnum;
*p = 1024; //出错
printf("*p:%d\n",*p);
p = &cnum;  //出错
printf("*p:%d\n",*p);
num = 1024;
printf("*p:%d\n",*p); //*p=1024
/*
指针自身不能被改变,它所指向的数据也不能通过对指针进行解引用来修改。这种限制其实在日常使用上很少能派上用场,并且如果初始化时指向的对象不是const修饰的变量,那么仍然可以通过变量名直接修改它的值:
*/
指向“指向常量的常量指针”的指针
const int cnum = 880;
const int *const p = &cnum;
const int *const *pp= &p;
printf("pp=%p,&p=%p\n",pp,&p);
printf("*pp=%p,p=%p,&cnum=%p\n",*pp,p,&cnum);
printf("**pp=%d,*p=%d,cnum=%d\n",**pp,*p,cnum);