[英]Why am I not getting an error (or at least warning) when I pass a number to a function that is expecting an enum?
[英]Getting warning when trying to pass the address in a function
我得到警告:
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];
通过地址有什么问题? 当我删除&
警告消失。
该警告实际上是什么意思?
这意味着您的呼叫应该是(不带&
):
AG_AS(g_AgMgrCtx.audio_device.Profile_Type, g_AgMgrCtx.SDevAddr);
g_AgMgrCtx.SDevAddr
是18个字符的数组。 因此,当您将其传递给函数时,它将转换为指向其第一个元素的指针(因此与AG_AS()
期望的类型匹配)。
相关: 什么是阵列衰减?
当你有一个这样的对象
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 *
类型,这是函数调用所必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.