指针和const的搭配使用

来自小甲鱼的书籍<<零基础入门学习c语言>>

指向常量的指针

int num = 520;
const int cnum = 880;
const int *pc = &cnum;

printf("*pc = %d,cnum= %d\n",*pc,cnum);
//*pc = 1024; 出错
pc = &num;
printf("*pc = %d,num= %d\n",*pc,num);
指向常量的指针
如果尝试修改指针pc引用的值(*pc),那么将被告知程序无法通过编译
但如果修改的是指针pc的指向,那么编译器并不会阻止:

常量指针

指向非常量的常量指针

int num = 520;
const int cnum = 880;
int *const p = &num;

*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);
posted @ 2020-09-24 22:23  传说中的旅行者  阅读(167)  评论(0)    收藏  举报