C中的常量指针

constant pointer in C

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between char s[] and char *s in C?

有一个程序:

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>

int main()
{
    char str[20] ="Hello";
    char *const p=str;
    *p='M';
    printf("%s
"
, str);
    return 0;
}

这把梅洛印成了答案。但是既然p是一个常量指针,它不应该给出一个错误吗?


准确地说,它是一个包含指针。你不能改变它的指向。你可以改变它的意义。

1
2
3
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所指的值是完全合法的。

有一个详细的解释:const char vs.char const vs.const*char const


常量指针和指向常量数据的指针之间存在差异。考虑这四个方面:

1
2
3
4
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

您不能更改EDOCX1的值(1),但可以更改EDOCX1的值(3)。

如果你写了char const *p=strconst char *p=str,那么你就不能修改*p