2010-05-28 60 views
10

真正簡單的問題。根據我的男人頁,這兩個會做同樣的:time(NULL); vs時間(&東西);

time_t t; 
time(&t); 

printf("Time: %ld", t); 

...

printf("Time: %ld", time(NULL)); 

那麼,究竟是一個指針傳遞給時間的好處?如果time()由於沒有時鐘可用而失敗,那麼在我看來這兩個變體都沒有任何好處。

回答

8

好處是您在調用'time'之後不必將數據複製到另一個結構中。

如果你是例如準備一個數據緩衝區發送到另一個應用程序/服務器,你將不得不復制數據,這是額外的開銷。通過將指針傳遞到數據結構中,您可以一次性將它放在正確的位置。

當然,如果您只用於數據將其轉換爲另一種格式,例如文本printf,那麼使用NULL調用它並保存第一個示例所需的額外存儲空間效率更高。

最後,由於時間函數使用單個位置來存儲它的內部時間結構,所以第一種方法會更線程安全,但如果'時間'實際上是線程安全的,我不記得我的頭頂部。

0

從手冊頁:

time_t的時間(time_t的* T);

「如果t不是NULL,返回值也會存儲在t指向的內存中。」

我想這只是傳統的東西。

+1

OP得到這個。他要求_why_你想傳遞一個非NULL指針。 – 2010-05-28 11:43:25

1

我見過的大多數例子都通過了NULL。我同樣認爲傳遞一個有意義的指針沒有任何好處,特別是因爲time_t幾乎總是一個整數類型。

0

作爲函數參數傳遞的指向time_t值的指針 - IMO是語法存在的一個原因。

time_t *foo(time_t *dest) 
{ 
    time(dest); 
    /* do something with dest here */ 
    return dest; 
}