背景
阅读某些内核代码。
问题
我无法理解这一行的含义。
*(void **) &(int[2]){0,PAGE_SIZE};
更多,这是什么意思?
{0,PAGE_SIZE}
在我看来,带有逗号的这个并不像是一个函数。
这段代码到底是什么意思?我不理解这里的间接引用。
它是一个函数还是转换?方括号部分代表什么意思?对我来说似乎很复杂,但肯定有意义。
(int[2]) { 0, PAGE_SIZE }
这是一个表达式(称为组合文字),其值是包含两个int
的数组。该数组的地址被获取,转换为void **
,并进行解引用。
最终结果是将数组内容重新解释为指向void的指针。
请注意,您可以获取复合文字的地址,因为它们是左值。例如,请参见此问题。
{...}
!如果你试图将{...}
赋值给一个非指针或非数组变量,你将会收到错误提示! - Am_I_Helpful&
运算符应用于非左值(或者可以吗?)@remyabel - templatetypedef
int[] const foo = {0, PAGE_SIZE}; *(void**)(&foo);
。 - Billy ONeal