我收到警告:
expected 'const CHAR *' but argument is of type 'CHAR (*)[18]'
为什么编译器会给我这个警告?这是我用来调用api的行:
AG_AS(g_AgMgrCtx.audio_device.Profile_Type,&g_AgMgrCtx.SDevAddr);
该功能的声明是
AG_AS(AG_DType d_type , CHAR *addr);
char SDevAddr[18];
传递地址有什么问题?当我删除&
时,警告就会消失。
警告实际意味着什么?
答案 0 :(得分:2)
这意味着您的电话应该是(没有&
):
AG_AS(g_AgMgrCtx.audio_device.Profile_Type, g_AgMgrCtx.SDevAddr);
g_AgMgrCtx.SDevAddr
是一个包含18个字符的数组。因此,当您将它传递给函数时,它会转换为指向其第一个元素的指针(从而匹配AG_AS()
期望的类型)。
答案 1 :(得分:0)
当你有这样的对象时
T obj;
其中T是某种类型,则表达式&obj
具有类型T *
,它是指向T
类型的对象的指针。
此数组声明
char SDevAddr[18];
可以使用typedef将转换为上面显示的形式。例如
typedef char T[18];
T SDevAddr;
在这种情况下,表达式&SDevAddr
的类型为T *
,如上所述。但在这种情况下,T
又是char[18]
类型的别名。因此&SDevAddr
是指向char[18]
类型对象的指针。它的类型看起来像char ( * )[18]
。
但是从功能声明中可以看出
AG_AS(AG_DType d_type , CHAR *addr);
第二个参数的类型为char *
。如果您将作为参数传递数组本身,如SDevAddr
,那么它将被隐式转换为指向其第一个元素的指针,并且将具有函数调用所需的类型char *
。