我有一个枚举,我想将其中一个值传递给Objective-C方法,直接期望char *
而不是创建另一个变量。我该怎么办?
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];
答案 0 :(得分:2)
使用(char[]){value1}
获取char*
指向value1
的{{1}}解释为char
的示例完全合法。等效代码可能看起来像
char achar = value1;
[data appendBytes:&achar length:1];
但是你的(char[]){value1}
显然是少了一行代码,所以我说顺其自然。
对于任何困惑的人,(char[]){value1}
是compound literal。它是一种构造任何类型值的方法,包括聚合,作为表达式。在这种特殊情况下,它构造了一个char
s数组,初始化程序包含一个元素,因此构造一个char[1]
,然后在传递给方法时隐式转换为指针。有趣的是,您甚至可以获取复合文字的地址(尽管地址仅对找到复合文字的完整表达式有效),因此在这种情况下,等效地为&(char){value1}
。