请看下面三种定义:
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的值,也就是地址无法修改。