2012-08-13 310 views
1

可以有一个人解释以下线:指向指针数组的指针是?

const void *const *ptr; 

是它两者&类型PTR变量是恒定?

+6

您可能会发现[spiral rule](http://c-faq.com/decl/spiral.anderson.html)有帮助。 – chris 2012-08-13 13:38:43

+1

[将ptr声明为const指针指向const void](http://cdecl.ridiculousfish.com/?q=const+void+*const+*p%3B) – 2012-08-13 13:41:11

+0

[此C语句的含义是什么? ](http://stackoverflow.com/questions/8249483/what-does-this-c-statement-mean) – 2012-08-13 13:45:33

回答

2

const void *const *ptr; 

可以变化ptr,但不*ptr,或**ptr

ptr = <SOMETHING_ELSE>; /* ok */ 
*ptr = <SOMETHING_ELSE>; /* error */ 
**ptr = <SOMETHING_ELSE>; /* error, ignoring the point that you cannot even have an object of type void */ 
+2

'const'或不是,那么你将有一个错误解引用指针('** ptr' ),因为它是一个指向不完整类型的指针。 ;-) – netcoder 2012-08-13 14:07:12

+0

@netcoder:+1。我添加了评论,谢谢 – pmg 2012-08-13 14:10:03

1

从我的脑海的顶部:

void * const var; // The pointer is constant and var can change 
const void * var; // The pointer can change but not var 

所以我想那您的语法

const void * const *ptr; 

表示ptr是指向指针的指针。所以ptr会指向一个地址,并且该地址不能改变(第一个const)。此外ptr所在的地址也不能改变(第二个const)。但我对此并不完全确定。