2012-08-13 261 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)。但我對此並不完全確定。