C中的常量指针

Cha*_*eep 3 c pointers

可能重复:
C中的char s []和char*s有什么区别?

有一个程序:

#include<stdio.h>

int main()
{
    char str[20] = "Hello";
    char *const p=str;
    *p='M';
    printf("%s\n", str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这打印Mello作为答案..但由于p是一个常量指针,它不应该给出错误吗?

eme*_*esx 14

它确实是一个特殊的指针.你不能改变它指向的地方.你可以改变它指出的东西.

const char *p;  // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...
Run Code Online (Sandbox Code Playgroud)

记住语法的最简单方法是根本不记住它.只需阅读从右到左的声明 :-)