type* const p与 typer const * p和 const type * p的区别

╰+攻爆jí腚メ 2022-02-26 00:14 330阅读 0赞

1.概念

char* const p: p为指向字符变量的指针,地址不变,地址内容可变

const char *p: p为指向字符变量的指针,地址可变,地址内容不变

char const *p:p为指向字符变量的指针,地址可变,地址内容不变, 与const char *p等价

2.进一步理解

  1. int main()
  2. {
  3. char ch[]="hello world!";
  4. char const *p; //地址可变,内容不变
  5. p=ch;
  6. p++;
  7. char * const q=&ch[1]; //地址不变,内容可变
  8. *q='m';
  9. printf("%c,%c\n",*(p+3),*q);
  10. return 0;
  11. }

输出结果:(正常输出)

20190328152639355.png

若:(char* const p,地址不能变化,内容可以变化)

  1. int main()
  2. {
  3. char ch[]="hello world!";
  4. char const *p; //地址可变,内容不变
  5. p=ch;
  6. p++;
  7. char * const q=&ch[1]; //地址不变,内容可变
  8. q++; //报错
  9. printf("%c,%c\n",*(p+3),*q);
  10. return 0;
  11. }

报错:

20190328152759257.png

再若:(const char *p,地址可变,地址内容不变)

  1. int main()
  2. {
  3. char ch[]="hello world!";
  4. char const *p; //地址可变,内容不变
  5. p=ch;
  6. *p='m'; //报错
  7. char * const q=&ch[1]; //地址不变,内容可变
  8. *q='m';
  9. printf("%c,%c\n",*(p+3),*q);
  10. return 0;
  11. }

编译报错:

2019032815313555.png

并且请注意:指针常量在定义的时候必须初始化,否则报错

  1. int main()
  2. {
  3. char ch[]="hello world!";
  4. char const *p; //地址可变,内容不变
  5. p=ch;
  6. char * const q; //指针常量(定义的时候必须初始化),地址不变,内容可变
  7. q=&ch[1];
  8. printf("%c,%c\n",*(p+3),*q);
  9. return 0;
  10. }

编译报错:(char * const q;定义的时候必须初始化)

20190328153646506.png

参考文献:

【1】https://blog.csdn.net/jjjcainiao/article/details/22381845

发表评论

表情:
评论列表 (有 0 条评论,330人围观)

还没有评论,来说两句吧...

相关阅读