2016-12-14 77 views
-2

我就遇到了這個庫中的編譯器:*在C中做什麼符號?

register char *bufptr; 
register int neg = val < 0; 
register long uval = val; 

*(bufptr = &tempc[BUFLEN - 1]) = 0; 

do {*--bufptr = abs(uval % 10) + '0';} while(uval /= 10); 

什麼是「* - 」,其實呢?我試圖尋找,但它沒有包含在我能找到的C參考文獻中,搜索引擎不太喜歡「* - 」。

+5

這是兩個運算符 - 把'* - bufptr'想成'*(--bufptr)'。 –

+1

指針解除引用(*)和預先遞減( - ) – byxor

+3

這是「醜陋」代碼的一個示例。 – haccks

回答

5

*--bufptr相當於*(--bufptr),即它首先遞減bufptr然後得到它的值。

如果你看看precedence table of C operators那麼你會發現增量和減量運算符具有更高的優先級,即解引用運算符。

+0

好吧,我明白了。我實際上並沒有意識到預先遞減和爲什麼存在。 – Barleyman

+1

@Barleyman如果你不知道預遞減算子,那麼我會建議你拿一本好的C書。 – taskinoor

+0

很容易找到一個沒有涉及的參考。你也不會在源代碼中碰到太多東西。當然不在我寫的固件中,原因很明顯。 – Barleyman

1

它只是一個*和 - 的序列,沒有空格;這與*(--bufptr)相同。