繁体   English   中英

尝试在函数中传递地址时收到警告

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM