C中的常量指针

时间:2012-09-22 13:29:49

标签: c pointers

  

可能重复:
  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是一个常量指针,它不应该给出错误吗?

4 个答案:

答案 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指向的值是完全合法的。

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

答案 2 :(得分:0)

您无法更改p的值,但可以更改*p的值。

如果您已撰写char const *p=strconst 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