pos*_*ist 6 c gcc pointers casting char
我有一段看起来像这样的C代码:
const char (*foo)[2] = bar();
Run Code Online (Sandbox Code Playgroud)
现在bar()是一个返回a的函数(const void *).我如何正确地投射这个const指针?该代码从GCC产生此警告:
"initialization discards qualifiers from pointer target type".
Run Code Online (Sandbox Code Playgroud)
以下是我不成功的一些尝试:
const char (*foo)[2] = (const char *)bar();
const char (*foo)[2] = (const void **)bar();
Run Code Online (Sandbox Code Playgroud)
原始代码确实有效,我只是无法通过正确转换返回值来消除警告.
编辑:有人建议:
const char (*foo)[2] = (const char (*)[2])bar();
Run Code Online (Sandbox Code Playgroud)
它似乎是正确的,但GCC给出了这个警告:
"cast discards qualifiers from pointer target type"
Run Code Online (Sandbox Code Playgroud)
这几乎与原始警告相同.
编辑2:好的,我想我已经知道了.这里真正的问题是( const void * )定义bar().的const在定义(const char( * )[2])指的是阵列的元件,而不是指向数组.这种类型定义本质上是一个数组,当由void指针表示时不是 const.真正的答案是,在施放时( const void * )失去了它cons的力量(const char ( * )[2]).