C中的常量指针

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是一个常量指针,它不应该出现错误。


3
常量指针和指向常量的指针的区别在于,常量指针是指针本身不可更改,但指向的值可以更改;而指向常量的指针则是指针所指向的值不可更改,但指针本身是可以更改的。 - Baz1nga
4个回答

15

这是一个常量指针,确切地说。您无法更改它所指向的位置,但可以更改它所指向的内容

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

记忆语法最简单的方法就是根本不要去记忆。 只需要从右到左阅读声明即可 :-)


完美的答案! :) 让一切都清晰明了! :) - Rebooting

2

@Mat,你说得对,删除了我的评论(尽管有人同意我 :) - Jens Gustedt

0

你不能改变 p 的值,但是你可以改变 *p 的值。

如果你写成了 char const *p=str 或者 const char *p=str,那么你就不能修改 *p 的值。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接