1
請看看到pthread_create()
原型,我們有:混淆將數據傳遞給pthread_create()...它是如何工作的?
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
到最後一個參數是一個空指針。但看看互聯網上的一些代碼,我看到開發人員在做:
long t;
pthread_create(&thread, NULL, function, (void*)t);
它的工作原理!我的意思是他們沒有這樣做:
pthread_create(&thread, NULL, function, (void*)&t);
換句話說,沒有使用「t」的引用。
但是,如果我將數據類型更改爲「int」而不是「長」..不起作用。
我相信應該總是考慮參考,但是你知道爲什麼長時間工作沒有參考?
謝謝你們!
但是爲什麼不同樣的事情工作機智'int'?如果'long'足夠小以適應'void *',那麼'int'不應該是這樣嗎? – Shredderroy
@Shredderroy - 我們必須看到具體的代碼來說明有什麼不同 - 我懷疑這是與符號擴展有關的事情,這種擴展是或不會發生的,因爲具體的方式會從/ void *被編碼。 –
當我讀到這個問題時,我最初的想法是'long'的值可能被隱式地認爲是一個地址,但'int'的值不是。但我不確定。此外,似乎我的想法是實現或編譯器特定的,而原始的海報似乎打算將其視爲一般事件。 – Shredderroy