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