Für einen Moment dachte ich tatsächlich, dass ich diesen ganzen Zeiger, Referenzierung und Dereferenzierung Sache verstanden habe, aber jetzt bin ich wieder ratlos.Wie Elemente in einem Bytearray (übergeben durch Verweis) mit ganzzahligen Werten verglichen werden
typedef NS_ENUM (uint8_t, ControlCode) {
CC_NONE = 0x00,
CC_START = 0x01,
CC_END = 0x02,
};
- (void)testReferencingAnArray
{
uint8_t msgBytes[3];
msgBytes[0] = CC_START;
msgBytes[1] = 3;
msgBytes[2] = CC_END;
XCTAssertEqual(msgBytes[0], CC_START);//These three tests pass
XCTAssertEqual(msgBytes[1], 3);
XCTAssertEqual(msgBytes[2], CC_END);
uint8_t *msgBytes_pointer = msgBytes;
[self evaluate:&msgBytes_pointer];
}
- (void)evaluate:(uint8_t **)msgBytes_pointer
{
XCTAssertEqual(*msgBytes_pointer[0], CC_START); //Test passes
XCTAssertEqual(*msgBytes_pointer[1], 3);
//Test fails with ("<11>") is not equal to ("3")
XCTAssertEqual(*msgBytes_pointer[2], CC_END);
//Test fails with ("<00>") is not equal to ("<02>")
}
Keine Notwendigkeit für '(uint8_t **)' ', wenn (uint8_t *)' würde genügen, nicht wahr? –
@FiddlingBits Sie würden denken, aber nein, nicht nach http://stackoverflow.com/questions/30618860/pass-uint8-t-array-to-method. –
Ich habe den Code bearbeitet, um es klarer zu machen, dass evaluate: erwartet einen Zeiger auf ein Array. Sie können das Array als Referenz übergeben, aber Sie können dann keine Vergleiche für die Elemente im Array durchführen. –