2017-12-08 5 views
0

みんな! なぜ私は "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 

エラー:

&(t = a_ib_u(u->us, 16)) 

あなたがここにある何「のchar *」

+1

割り当ての結果は* lvalue *ではありません。あなたは左辺値のアドレスしか取ることができません。例えば、詳細については、[この値カテゴリのリファレンス](http://en.cppreference.com/w/c/language/value_category)を参照してください。 –

+8

このような醜い行は書かないでください。あなたのコードを複数のステートメントや行に分割すると、奇妙で​​難しい問題を解決する頻度が少なくなります。 – user694733

+0

@Someprogrammerdudeありがとう! – EmanRuoy

答えて

1

あなたが実際にここで変数のアドレスを取っていないタイプの右辺値のアドレスを取ることができません代入演算子であり、その値が割り当てられた値である式です。これは、変数のアドレスを取ることと同じではありません。コメントに記載されているように、変数は左辺値であり、1つ以上の演算子を含む式は右値です。あなたは左辺値のアドレスしか取ることができません。この問題を回避するには

、あなたはコンマ演算子を使用することができます:あなたが関数の引数の区切り文字として解釈されることから、コンマを防ぐために、コンマ演算子式の周りの括弧の余分なペアが必要

flygs->type == 'X' ? t = a_ib_u(u->us, 16) : 
        a_lowcasealph(((t = a_ib_u(u->us, 16)), &t)); 

注意を。

+2

結果コードが私の目を傷つけます。ユーザ4386427の回答で提案された方法が好ましい。 –

5

@dbushの回答は、すでにエラーの原因を説明しています。

私は、コードを書き換えて、理解して維持するのがはるかに簡単であると付け加えたいと思います。 Like:

t = a_ib_u(u->us, 16); 
if (flygs->type != 'X') a_lowcasealph(&t); 
関連する問題