功能我最近遇到下面的代碼哪兒來的宏定義如下指定數組宏
unsigned char cbuf[10];
#define pbuf() (&cbuf[0])
任何人都可以請解釋什麼是在#define
(宏定義)線正在做?
功能我最近遇到下面的代碼哪兒來的宏定義如下指定數組宏
unsigned char cbuf[10];
#define pbuf() (&cbuf[0])
任何人都可以請解釋什麼是在#define
(宏定義)線正在做?
當代碼包含pbuf()
時,預處理器(在實際編譯之前運行)用(&cbuf[0])
替換,基本上改變了提供給實際編譯器的源代碼。因此,宏的意圖是給出cbuf變量的第一個元素的地址(這個變量在當前範圍內有什麼變化,因爲預處理器實際上只是做了「字符串替換」而不知道上下文)。這是一個有點多餘,因爲數組的名字也是它的地址是第一要素...
換句話說,你在哪裏都將使用pbuf()
,只需直接寫cbuf
。
@ user1611753在C中,指針可以用作數組。就是說,'int * foo; foo [index] = value;'是有效的。也可以用另一種方式工作,'int a [5]; int * ip = a;'是有效的,數組變量的名字就像一個指針。指向數組的指針與指向數組第一個元素的指針完全相同,並且可以互換使用。 – hyde
......這就是爲什麼說,C沒有真正的數組。 C數組基本上只是指針周圍的語法糖。如果傳遞的是變長數組,則必須單獨告訴長度(其他參數或某個數組結束標記,如使用C字符串的0字節,並且在指針數組的情況下通常在最後一個元素處使用NULL指針)否則不包含NULL。 – hyde
好吧,'pbuf()'被定義爲'(&cbuf [0])'... – 2012-11-02 07:41:16
這個宏沒有目的,只是混淆了代碼,不使用它。 – Lundin