const 指针 - 为什么不允许使用 const 指针

const pointer - const pointer why isn't allowed

为什么不是 *p = 0;和 q = NULL;允许?我知道因为 Pointer 是 const 但我不知道为什么在 q 和 0 在 *p 时完全为 NULL?

const int i = 0;
const int *p = &i;

int j = 0;
int * const q = &j;

// *p = 0; // Fehler, *p konstant
p = NULL;

*q = 0;
// q = NULL; // Fehler, q konstant

return 0;

const int * pp 声明为指向 const int 的指针,

所以p指向的int不能改变,但是如果p仍然指向一个const int,你可以修改p


int * const qq 声明为指向 int 的常量指针。

q反之不能改变,但是指向的值可以。


你可以使用cdecl来理解C声明:

~$ cdecl
cdecl> explain  const int *  p
declare p as pointer to const int
cdecl> explain  const int *  q
declare q as pointer to const int
cdecl>
const int *p = &i;

这里p是non-const指向const int的指针。由于指针本身不是const,你可以设置它指向其他的东西,比如NULL,但是它指向的是const,所以你不能通过这个指针修改它。


int * const q = &j;

这里q是指向non-const int的const指针。它被初始化为指向 j,您无法更改它指向的内容。但是你可以通过它改变它指向的内容。


const int * const r = &j;

这将是指向 const int 的 const 指针。所以你不能改变它指向的东西,你只能读取它指向的值,不能改变它。