0

I have an enum and I want to pass one of its value to an Objective-C method expecting char * directly instead of creating another variable. What should I do?

e.g.

typedef enum { value1 = 0xAA, value2 = 0xBB, value3 = 0xCC } myValue;

NSMutableData *data = [[NSMutableData alloc] init];

// want to pass in the enum directly as char * but won't work

[data appendBytes:(char *){ value1 } length: 1];

// this will work, why? and is this the best way?

[data appendBytes:(char []){ value1 } length: 1];
4

1 に答える 1

2

aとして解釈されることを指す(char[]){value1}a を取得するために使用する例は、完全に正当です。同等のコードは次のようになりますchar*value1char

char achar = value1;
[data appendBytes:&achar length:1];

しかし、あなた(char[]){value1}のコードは明らかに 1 行少ないので、それでいいと思います。


混乱している方のために説明すると、(char[]){value1}複合リテラルです。これは、集計を含むあらゆる種類の値を式として構築する方法です。この特定のケースでは、char1 つの要素を含むイニシャライザを使用して s の配列を構築しているためchar[1]、これは a を構築し、メソッドに渡されると暗黙的にポインタに変換されます。興味深いことに、複合リテラルのアドレスを取得することもできます (ただし、アドレスは複合リテラルが見つかった完全な式に対してのみ有効になります)。したがって、この場合の等価物は になります&(char){value1}

于 2013-01-16T04:26:32.597 に答える