有一个程序:
#include<stdio.h>
int main()
{
char str[20] = "Hello";
char *const p=str;
*p='M';
printf("%s\n", str);
return 0;
}
这会将 Mello 作为答案打印出来。但是由于 p 是一个常量指针,它不应该给出错误吗?
有一个程序:
#include<stdio.h>
int main()
{
char str[20] = "Hello";
char *const p=str;
*p='M';
printf("%s\n", str);
return 0;
}
这会将 Mello 作为答案打印出来。但是由于 p 是一个常量指针,它不应该给出错误吗?
确切地说,它是一个常量指针。你不能改变它指向的地方。你可以改变它的点。
const char *p; // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...
记住语法的最简单方法是根本不记住它。只需从右到左阅读声明:-)
char *const p;
是一个指向 char 的常量指针。所以修改 指向的值p
是完全合法的。
您无法更改 的值p
,但可以更改 的值*p
。
如果您写了char const *p=str
or const char *p=str
,那么您将无法修改*p
。
常量指针和指向常量数据的指针是有区别的。考虑这四个:
const char * p=str; // p[0] is const
char const * p=str; // same
char *const p=str; // p is const. *p is not
char const *const p=str; // p is const, p[0] also