簡體   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