2011-12-20 5 views
2

なぜGCCが私にこのエラーを出すのですか?私はここで間違って何をしていますか?GCCエラー:バイナリに無効なオペランド+

temp.c: In function main: 
temp.c:6: error: invalid operands to binary + 

コード:

main() 
{ 
    char *Address1,*Address2,*NewAddress; 
    Address1= (char*)0x12; 
    Address2= (char*)0x34; 
    NewAddress = Address1+Address2; 
} 
+0

ポインタを追加することはできません。なぜあなたはしたいのですか? _does_ポインタとオフセットを追加するのは理にかなっていますが、2つのポインタは追加できません。 –

答えて

5

なぜあなたはそれをしたいですか?

C言語では、2つのポインタの追加を禁止しています。これは、ポインタと整数の追加だけを(重大な制限で)定義します。

基本的には、結果が割り当てられたメモリゾーンの内側または最後の境界にあるように、十分小さな整数をポインタに追加できます。

+0

割り当てられた領域からアドレスが覗き込まないようにするために、なぜCがこの制限を課しているのですか? – Jean

+0

C言語の標準では、より政治的に正しい言葉で - ポインタがどこにもない場合、その振る舞いは未定義です。定義されていない動作とは、実際には何かを意味します。コンピュータを爆発させることは、未定義の動作の有効な実装です。 –

0

あなたは無意味であろうと、一緒にポインタを追加することはできません。ポインタに整数値を追加して許可されている何

:これらの変数はポインタであるため、

char *Address1,*NewAddress; 
unsigned Offest; 
    Address1= (char*)0x12; 
    Offset= 0x34; 
    NewAddress = Address1+Offset 
0

intに変換してみてください。

NewAddress = (char *)((int)Address1 + (int)Address2); 
0

Cでは、2つのポインタを追加できません。あなたがそれについて考えるなら、論理的には試みるのは意味がありません。これを修正するには、追加する前に、整数値へのポインタのいずれかをキャストすることができます。

NewAddress = (long)Address1 + Address2; 
4

Cは、二つのポインタを追加できません。私は、任意の標準に触れていない、このために発見された最良の説明は、ルーベンRostamianの引用です:

If you and I live on the same street, the difference of our house numbers is some sort of indication of the distance between our houses.

Now, you tell me, what meaning is there in the sum of our house numbers?

だから、全体の動作が何らかの意味がありません。それはかなり論理的ですね。ただし、これを行うことができます:

NewAddress = (char *)(0x12 + 0x34); 
関連する問題