有可能吗?
我的意思是这样的:
const int *a;
int x=6;
a=&x;
另一个问题是,是否可以从上到下继续:
int const *b = a;
答案 0 :(得分:3)
您可以将指向对象类型的指针转换为指向其他对象类型的指针。特别是,您可以将int *
转换为const int *
,反之亦然。
即使您通过指向非const类型的指针,也不能修改使用const
定义的对象。
const int
和int const
是相同的,因此允许使用int const *b = a;
。
a = &x;
;将指向int
的指针转换为指向const int
的指针是安全的。
答案 1 :(得分:2)
所以,让我们重复一些声明:
指向常量整数的指针。以下两个声明是相同的。
const int * x;
int const * x;
此外,指针在这里不是常量。因此,我们可以更改x
指向的内容。
const int * x;
x = malloc(sizeof(int)); // Legal
但是,我们无法更改x指向的值:
*x = 3; // Illegal.
指向整数的常量指针。
int * const x;
在这种情况下,我们无法改变x指向的内容,但我们可以更改内容。所以......
int * const x = malloc(sizeof(int));
*x = 3; // Legal
x = NULL; // Illegal
我们也可以同时做这两个问题。 (指向常量数据的常量指针)
const int * const x;
int const * const x;
并显示非法行动:
int const * const x = malloc(sizeof(int));
x = NULL; // Illegal
*x = 3; // Illegal
答案 2 :(得分:1)
关于你的问题
int const *b = a;
此处a
是指向const int
的指针。 b
具有相同的类型(确切地说)。因此,您可以毫无问题地使用b
初始化a
。
总结上面针对a=&x;
给出的答案,您可以安全地将指针从类型T
转换为类型const T
,而不是相反。原因是,从类型T
到const T
的转换不会破坏对象,因为指向const类型的指针只会读取对象而不会写入。但另一种方式,从const T
到T
的转换可能会写入const T
。