2017-07-27 57 views
4

我有這樣的定義塊的C數組裏面:訪問塊的C數組塊

void (^block1)() = ^void() { 
    doSomething1(); 
    doSomething2(); 
}; 

void (^block2)() = ^void() { 
    doSomething3(); 
    doSomething4(); 
}; 

// etc. 
typedef void (^myBlockType)(); 
myBlockType arrayBlock[2]; 
arrayBlock[0] = block1; 
arrayBlock[1] = block2; 

但後來我試圖從訪問塊內部的數組c,像

void (^adjust)(int value) = ^void(int value) { 
    myBlockType myBlock = arrayBlock[value]; 
}; 

和Xcode中與嗚嗚

不能引用聲明以與陣列型內部塊

如果這是一個像浮點數,整數等東西的數組,那麼有this solution但是如何爲C數組塊做到這一點?

我可以做

myBlockType array = calloc(2, sizeof(myBlockType)); 

?這是正確的方法嗎?在那種情況下,我如何初始化這些值?

+0

兩個問題(一)你不說你爲什麼不使用'NSArray',這將有助於瞭解(二)鏈接*問題*(而不是*答案*)提供你有一個解決方案 - 它有一個X數組,你有一個Y數組,對程序沒有任何影響 - 所以那對你沒有用?如果你編輯問題來回答可能是最好的(只留下你已經這樣做的評論)。 – CRD

+0

對不起,我的C很爛,但我必須使用一個C數組,因爲我必須與之交互的模塊,而不是我寫的,都是用C語言編寫的。除了我的C很糟糕之外,我的另一個問題是,數組不能通過使用'array [i]'語法來訪問。我已經嘗試過了,並且Xcode在各處都抱怨着。我猜這個數組上的元素必須使用指針來訪問,而且我不知道如何去做,或者甚至用元素來填充數組來開始。 – SpaceDog

+0

繼續......並且看着我對C語言知識不瞭解的鏈接並沒有讓我在那裏看到答案......如果你能回答我如何創建它,填充和獲取這些項目,我會接受答案......是的,我知道,我的C很臭。謝謝 – SpaceDog

回答

0

好吧,註釋跟蹤後的一些指針,但你需要學習和理解這裏發生了什麼

我可以做

myBlockType array = calloc(2, sizeof(myBlockType)); 
  • 在C語言中數組指針是密切相關的。在C數組T x[n]中,名稱x的類型爲T * - 指針。索引操作x[n]被定義爲與使用指針操作的*(x + n)相同(* & +)。所以你可以像處理一個指針和一個像數組一樣的指針來處理數組,例如你可以「索引」一個指針。
  • 正如你發現你不能在一個塊中捕獲一個本地數組變量。
  • 可以捕獲一個指針值變量,但是它是你的責任,以確保指出什麼仍然有效。
  • 您的calloc想法是一種可能的解決方案,但類型錯誤,需要將array聲明爲指針。
  • 此外,如果您正在使用ARC(可能性更大)並存儲可保留對象類型的指針,例如,對象或塊的引用,則array的類型必須包含所有權限定符。您可能應該使用__strong,以便您的「數組」擁有它引用的項目,就像NSArray那樣。
  • 對於任何你calloc(或malloc)如果需要,你負責撥打free

瞭解這些項目符號和你可能的解決方案(有多個)只是掉下來。

HTH

+0

好的謝謝!我會檢查一下。 – SpaceDog