使用以下代码时出现“不兼容的指针类型”的编译错误。
f(unsigned char** arr)
{
unsigned char* p = *arr;
}
int main()
{
unsigned char a[31];
f(&a);
}
我想了解原因和如何解决。
编辑
抱歉,我遗漏了一点。
当我使用 gcc 进行编译时,它只是一个警告,但 g++ 将其作为错误引发。
cannot convert ‘unsigned char (*)[31]’ to ‘unsigned char**’`
我想修复使用 g++ 时的错误。
表达式
&a
的类型为“指向unsigned char
大小为 31 的数组的指针”,即unsigned char (*)[31]
这与 的声明参数不同unsigned char **
,前者不能转换为后者。假设您想在函数内部对数组进行操作。如果是这样,只需将参数类型更改为
unsigned char *
并直接传递a
给函数:这是允许的,因为当数组在表达式中使用时(而不是作为 的操作数
&
),它会退化为指向其第一个元素的指针。具体来说,当传递给函数时,类型的数组unsigned char[31]
会退化为类型的指针unsigned char *
。a
是一个由 31 个元素组成的数组unsigned char
(unsigned char[31]
)。&a
是指向这样一个数组的指针(unsigned char (*)[31]
)。您正尝试将其“分配”给
arr
,这是一个指向 的指针unsigned char
。&a
没有指向指针。&a
与 不兼容unsigned char **
。通常的方法:(指向第一个元素的指针)
替代方法:(指向数组的指针)