可能重复:
What is the difference between char s[] and char *s in C?
有一个程序:
#include<stdio.h>
int main()
{
char str[20] = "Hello";
char *const p=str;
*p='M';
printf("%s\n", str);
return 0;
}
这打印Mello作为答案..但是因为p是一个常量指针,它不应该给出错误吗?
答案 0 :(得分:14)
这完全是一个指针。您无法更改指向的位置。您可以更改指向的内容。
const char *p; // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...
记住语法的最简单方法是根本不记住它。 只需阅读从右到左的声明: - )
答案 1 :(得分:2)
char *const p;
是指向char的常量指针。因此,修改p
指向的值是完全合法的。
答案 2 :(得分:0)
您无法更改p
的值,但可以更改*p
的值。
如果您已撰写char const *p=str
或const char *p=str
,那么您将无法修改*p
。
答案 3 :(得分:0)
常量指针和指向常量数据的指针之间存在差异。考虑这四个:
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