2011-02-11 20 views
1

數組如何在C中作用域?他們什麼時候被毀壞? (注意,也談談,如果他們甚至可以在p_threads傳遞)線程中的數組作用域

+0

我認爲你的意思是Pthreads或POSIX線程。 – 2011-02-11 11:53:46

回答

1

他們作用域就像正常的變量:

// in a function 
int arrayA[300]; 
{ 
    float arrayB[100]; 
    // arrayA and arrayB available here 
} 
// arrayB out of scope, inaccessible. 
// arrayA still available. 

如果你要通過陣列的功能,這將是有效的只要這個數組仍然在呼叫站點的範圍內。

1

數組的範圍與其他任何基元,結構或聯合一樣。 C中沒有任何東西會被破壞,儘管數組可以超出範圍。

此外,就像其它類型,陣列可在堆上通過調用malloc()分配足夠的空間來容納元件的所需數量,以及處理所述返回void *作爲指針的第一個元素分配。這樣的數組將在您致電free()之前有效。

WRT Pthreads,規則和其他任何類型一樣。如果將數組定義爲自動(函數範圍)變量,則函數返回時它將立即超出範圍;你不能安全地將一個指向這樣的數組的指針傳遞給另一個線程。但是如果你在堆上分配一個數組,那麼你可以在任何地方傳遞一個指向這個數組的指針(包括數組內的任何東西),包括另一個線程。當然,您仍然需要使用適當的同步機制來確保對內容的線程安全訪問。

1

數組與C語言中任何其他命名實體之間的範圍和生命週期規則完全沒有區別。即當涉及範圍和生命週期時,數組並不是什麼特殊的。他們的行爲就像普通的int變量一樣。

相關問題