2012-11-02 32 views
0

功能我最近遇到下面的代碼哪兒來的宏定義如下指定數組宏

unsigned char cbuf[10]; 
#define pbuf() (&cbuf[0]) 

任何人都可以請解釋什麼是在#define(宏定義)線正在做?

+0

好吧,'pbuf()'被定義爲'(&cbuf [0])'... – 2012-11-02 07:41:16

+3

這個宏沒有目的,只是混淆了代碼,不使用它。 – Lundin

回答

1

當代碼包含pbuf()時,預處理器(在實際編譯之前運行)用(&cbuf[0])替換,基本上改變了提供給實際編譯器的源代碼。因此,宏的意圖是給出cbuf變量的第一個元素的地址(這個變量在當前範圍內有什麼變化,因爲預處理器實際上只是做了「字符串替換」而不知道上下文)。這是一個有點多餘,因爲數組的名字也是它的地址是第一要素...

換句話說,你在哪裏都將使用pbuf(),只需直接寫cbuf

+0

@ user1611753在C中,指針可以用作數組。就是說,'int * foo; foo [index] = value;'是有效的。也可以用另一種方式工作,'int a [5]; int * ip = a;'是有效的,數組變量的名字就像一個指針。指向數組的指針與指向數組第一個元素的指針完全相同,並且可以互換使用。 – hyde

+0

......這就是爲什麼說,C沒有真正的數組。 C數組基本上只是指針周圍的語法糖。如果傳遞的是變長數組,則必須單獨告訴長度(其他參數或某個數組結束標記,如使用C字符串的0字節,並且在指針數組的情況下通常在最後一個元素處使用NULL指針)否則不包含NULL。 – hyde