4

可能重复:
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;
}

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

4

4 回答 4

15

确切地说,它是一个常量指针。你不能改变它指向的地方。你可以改变它的点

const char *p;  // a pointer to const char
char * const p; // a const pointer to char
const char * const p; //combined...

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

于 2012-09-22T13:32:57.060 回答
2

char *const p;是一个指向 char 的常量指针。所以修改 指向的值p是完全合法的。

有详细解释:const char vs. char const vs const *char const

于 2012-09-22T13:31:53.147 回答
0

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

如果您写了char const *p=stror const char *p=str,那么您将无法修改*p

于 2012-09-22T13:31:57.017 回答
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
于 2012-09-22T13:32:42.180 回答