type* const p与 typer const * p和 const type * p的区别
1.概念
char* const p: p为指向字符变量的指针,地址不变,地址内容可变
const char *p: p为指向字符变量的指针,地址可变,地址内容不变
char const *p:p为指向字符变量的指针,地址可变,地址内容不变, 与const char *p等价
2.进一步理解
int main()
{
char ch[]="hello world!";
char const *p; //地址可变,内容不变
p=ch;
p++;
char * const q=&ch[1]; //地址不变,内容可变
*q='m';
printf("%c,%c\n",*(p+3),*q);
return 0;
}
输出结果:(正常输出)
若:(char* const p,地址不能变化,内容可以变化)
int main()
{
char ch[]="hello world!";
char const *p; //地址可变,内容不变
p=ch;
p++;
char * const q=&ch[1]; //地址不变,内容可变
q++; //报错
printf("%c,%c\n",*(p+3),*q);
return 0;
}
报错:
再若:(const char *p,地址可变,地址内容不变)
int main()
{
char ch[]="hello world!";
char const *p; //地址可变,内容不变
p=ch;
*p='m'; //报错
char * const q=&ch[1]; //地址不变,内容可变
*q='m';
printf("%c,%c\n",*(p+3),*q);
return 0;
}
编译报错:
并且请注意:指针常量在定义的时候必须初始化,否则报错
int main()
{
char ch[]="hello world!";
char const *p; //地址可变,内容不变
p=ch;
char * const q; //指针常量(定义的时候必须初始化),地址不变,内容可变
q=&ch[1];
printf("%c,%c\n",*(p+3),*q);
return 0;
}
编译报错:(char * const q;定义的时候必须初始化)
参考文献:
【1】https://blog.csdn.net/jjjcainiao/article/details/22381845
还没有评论,来说两句吧...