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 * p
将 p
声明为指向 const int 的指针,
所以p
指向的int
不能改变,但是如果p
仍然指向一个const int
,你可以修改p
。
int * const q
将 q
声明为指向 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 指针。所以你不能改变它指向的东西,你只能读取它指向的值,不能改变它。
为什么不是 *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 * p
将 p
声明为指向 const int 的指针,
所以p
指向的int
不能改变,但是如果p
仍然指向一个const int
,你可以修改p
。
int * const q
将 q
声明为指向 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 指针。所以你不能改变它指向的东西,你只能读取它指向的值,不能改变它。