家伙! 为什么我不能接受“t” - 变量的地址?
flygs->type == 'X' ? t = a_ib_u(u->us, 16) : (a_lowcasealph(&(t = a_ib_u(u->us, 16))));
\\a_ib_u returns *char, a_lowcasealph take **char argument
错误:无法获取'char *'
类型的右值的地址答案 0 :(得分:5)
@dbush的答案已经解释了错误的原因。
我想补充一点,你可以重写代码并获得更容易理解和维护的东西。像:
t = a_ib_u(u->us, 16);
if (flygs->type != 'X') a_lowcasealph(&t);
答案 1 :(得分:1)
你实际上并没有在这里获取变量的地址:
&(t = a_ib_u(u->us, 16))
这里有一个表达式,它是赋值运算符,其值是赋值。这与获取变量的地址不同。正如评论中提到的,变量是左值,而涉及一个或多个运算符的表达式是 rvalue 。您只能获取左值的地址。
要解决此问题,您可以使用逗号运算符:
flygs->type == 'X' ? t = a_ib_u(u->us, 16) :
a_lowcasealph(((t = a_ib_u(u->us, 16)), &t));
请注意,在逗号运算符表达式周围需要一对额外的括号,以防止逗号被解释为函数参数的分隔符。