2017-10-01 10 views
-1

マトリックスを表す2D配列のデータを比較しようとしています。 それは疎な行列なので、私は2次元配列compactMatrixを作成しました。これは、値行列入り口がnullでない行と列を持ちます。配列比較で予期しない動作が発生する

私は比較を行うために、このコードを使用しています:ikが、私は現在、forループ内で探していたインデックスです

if(compactMatrix[0][i] == compactMatrix[1][k] && 
     compactMatrix[1][i] == compactMatrix[0][k]){ 

     Do stuff... 
    } 

。 あなたが知っているように、私はデバッグし、compactMatrix[0][i]compactMatrix[1][k]compactMatrix[1][i]compactMatrix[0][k]の値は本当に等しいです。

j = compactMatrix[0][i]; 
    l = compactMatrix[1][i]; 
    printf("%i %i", &j, &l); 

を使用して値を印刷しようとしましたが、それは私のポインタアドレスを与え、私は推測します。

ですから、なぜif節にfalseが返ってきたのか、正しく修正する方法を知りたいのですが。

+2

に引数をキャストすることを忘れないでくださいP指定子を使用して行うのであれば、この 'printfの( "%Iの%のI"、&J、&l);は' UBの原因となる。 – babon

+3

ドン」あなたのコードを記述しますが、[mcve] –

+4

を表示するには 'printf("%i%i "、j、l);' –

答えて

1

printfは、アドレスを必要としない値を出力するためだけに使用されます。また、アドレスを整数形式で表示しようとすると、未定義の動作が発生します。標準では、住所を%pで印刷する必要があります。対応する引数はapointerへのポインタでなければならない

%p標準自体から

printf ("%i %i",j,l);// you can use %d and %i interchangeably. 

いくつかの余分な注意:

CSペイはあなたがおそらく必要なもののコメントで述べたようにはこれです無効にする。 入力項目は、実装定義の方法で のポインタ値に変換されます。同じプログラム実行中に入力項目が に変換された値である場合、結果のポインタは と同じになります。それ以外の場合、%p 変換の動作は未定義です。

あなたは厳密に言えばvoid*

+0

これは私の質問に対する答えではありません。コンテンツを印刷しようとしました。 o IF CLAUSEは機能するはずですが、そうではないことを再度確認してください。 –

+0

私は理解していない、あなた自身は、配列の要素が本当に等しいと言いました。上記の質問で見つけられる唯一の問題は、印刷に関する問題です。 – 0decimal0

+0

あなたはそれをすべて読んでいますか? "だから、なぜif節でfalseが返ってきたのか、それを正しく修正する方法を知りたいのです。"それは真実を返すべきであるときに偽を返す。 –

関連する問題