const char *p,char const *p和char *const p区别(面试题常见)
参考网址:https://blog.csdn.net/m0_37806112/article/details/81252151
2018年07月27日 18:23:01 Lawrence_121 阅读数 4295更多
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_37806112/article/details/81252151
请看下面三种定义:
const char *p;
char const *p;
char * const p;
请问三者有什么区别?
先看第一种,先看p,根据优先级它和*结合,是指针,指向char类型,但是char前面有一个const修饰,所以p所指向的内容为const类型不可修改。
第二种:由于没有const *的运算,若出现const *的形式,则const实际上是修饰前面的,所以char const *p和const char *p一样。
第三种情况:const修饰的是p,p不能修改。
根据图示,p所指向的内容可以修改。而如果试图修改p的值,如下图
测试代码如下:
-
#include<stdio.h>
-
int main()
-
{
-
char str[100]="Hello World";
-
//const char *p=str;
-
//char const *p=str;
-
char *const p=str;
-
//p[0]='X';
-
p=&str[1];
-
printf("%s\n",p);
-
return 0;
-
}
总结:
const char *p; // 声明一个指向字符或字符串常量的指针(p所指向的内容不可修改)
char const *p;// 同上
char * const p;//声明一个指向字符或字符串的指针常量,即不可以修改p的值,也就是地址无法修改。