0

我有一个枚举,我想将它的一个值传递给一个期望char *直接而不是创建另一个变量的 Objective-C 方法。我该怎么办?

例如

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

您使用的示例将(char[]){value1}achar*指向value1解释为 achar是完全合法的。等效代码可能看起来像

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

但是你(char[]){value1}的代码显然少了一行,所以我说去吧。


对于任何困惑的人来说,(char[]){value1}是一个复合文字。这是一种将任何类型的值(包括聚合)构造为表达式的方式。在这种特殊情况下,它构造了一个 s 数组,char初始化器包含一个元素,因此它构造了 a char[1],然后在传递给方法时将其隐式转换为指针。有趣的是,您甚至可以获取复合文字的地址(尽管该地址仅对找到复合文字的完整表达式有效),因此在这种情况下等效为&(char){value1}.

于 2013-01-16T04:26:32.597 回答