真正簡單的問題。根據我的男人頁,這兩個會做同樣的:time(NULL); vs時間(&東西);
time_t t;
time(&t);
printf("Time: %ld", t);
...
printf("Time: %ld", time(NULL));
那麼,究竟是一個指針傳遞給時間的好處?如果time()
由於沒有時鐘可用而失敗,那麼在我看來這兩個變體都沒有任何好處。
真正簡單的問題。根據我的男人頁,這兩個會做同樣的:time(NULL); vs時間(&東西);
time_t t;
time(&t);
printf("Time: %ld", t);
...
printf("Time: %ld", time(NULL));
那麼,究竟是一個指針傳遞給時間的好處?如果time()
由於沒有時鐘可用而失敗,那麼在我看來這兩個變體都沒有任何好處。
好處是您在調用'time'之後不必將數據複製到另一個結構中。
如果你是例如準備一個數據緩衝區發送到另一個應用程序/服務器,你將不得不復制數據,這是額外的開銷。通過將指針傳遞到數據結構中,您可以一次性將它放在正確的位置。
當然,如果您只用於數據將其轉換爲另一種格式,例如文本printf,那麼使用NULL調用它並保存第一個示例所需的額外存儲空間效率更高。
最後,由於時間函數使用單個位置來存儲它的內部時間結構,所以第一種方法會更線程安全,但如果'時間'實際上是線程安全的,我不記得我的頭頂部。
從手冊頁:
time_t的時間(time_t的* T);
「如果t不是NULL,返回值也會存儲在t指向的內存中。」
我想這只是傳統的東西。
我見過的大多數例子都通過了NULL
。我同樣認爲傳遞一個有意義的指針沒有任何好處,特別是因爲time_t
幾乎總是一個整數類型。
作爲函數參數傳遞的指向time_t值的指針 - IMO是語法存在的一個原因。
time_t *foo(time_t *dest)
{
time(dest);
/* do something with dest here */
return dest;
}
OP得到這個。他要求_why_你想傳遞一個非NULL指針。 – 2010-05-28 11:43:25