为什么我不能接受变量的地址?

时间:2017-12-08 12:15:57

标签: c variables

家伙! 为什么我不能接受“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 *'

类型的右值的地址

2 个答案:

答案 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));

请注意,在逗号运算符表达式周围需要一对额外的括号,以防止逗号被解释为函数参数的分隔符。