之前和之后的星号?

时间:2014-04-05 07:43:00

标签: c++ c pointers

这就是我正在运行的:

pam_get_item(pamh, PAM_USER,(const void**)&pam_user);

pamh是一个对这个问题不重要的结构,pamuser是一个void指针。此代码编译并成功执行。但是,这不是:

pam_get_item(pamh, PAM_USER,(const **void)&pam_user);

为什么星号会在之前与之后改变意义?谢谢!

2 个答案:

答案 0 :(得分:2)

星号是构成该类型名称的组件。并且类型名称的组件顺序会影响它实际的类型。

具体来说,星号会修改类型,使其成为指向左侧任何类型的指针。所以,

void*

这是一个指向void的指针(即指向可能属于任何类型的内存区域的指针)。

const void*

这是一个指向const void的指针(即指向 const的内存区域的指针,或者应该从该指针的视图中看作const)。< / p>

const void**

这是指向const void*的指针。

所以,考虑到这一点,你会期望这是什么:

const **void

指向const指针的指针的void?无意义的。

答案 1 :(得分:2)

类型转换运算符为(type),其中type是有效类型。要检查type的语法是否有意义,请尝试定义type类型的变量。

(const void**)&pam_user // ok
const void **x;  // legal, meaningful

(const **void)&pam_user // wrong
const **void x; // wrong, meaningless

const符合此处的void类型。那么const之后的内容也应该是有效的类型。 ** void不是有效类型。 <{1}}之后的**毫无意义。