ページ 11

配列の中身の数値の比較

Posted: 2008年7月31日(木) 19:02
by kaiten
配列の中身の数値が一致しているかどうかを調べたいのですが、グーグル先生はどうも文字列の場合ばかり出してくれちゃうのでここで質問させていただきます。
a[0]==a[1]のようにすると配列のアドレスを比べてしまったと思うのですが、肝心の中身の比較のし方を忘れてしまいまして。memcmpはやっぱり文字列ですし。

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 19:12
by array
int a[2];
なら中身の比較だと思うんですけど
if(a[0]==a[1]){処理}

char a[/url];の話ですか?

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 19:25
by Mist
> memcmpはやっぱり文字列ですし。
memcmpはメモリに書かれている値の一バイトずつの比較なので、それが文字列であるかどうかなんて関係ないです。
long a[2];

a[0] = 100;
a[1] = 100;

if (!memcmp(&a[0], &a[1], sizeof(long)) {
    printf("一致\n");
}
こんなめんどくさいことする人はいないと思いますが(^-^;

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 20:08
by kaiten
……な、(ry
ということはお恥ずかしいながらどうやら別のところでミスしているようです。
ともかく、ありがとうございました。

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 20:15
by バグ
試しに書かれたソースを載せてみては如何ですか?アドバイスがうけられるかもしれませんよ(^-^)

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 23:08
by kaiten
ではお言葉に甘えて
Pc[a].slot[1]=Pc[a].img[1][0]=LoadGraph("Sh\\img\\player\\suika.png");
Pc[a].slot[2]=Pc[a].img[2][0]=LoadGraph("Sh\\img\\player\\suika.png");
if(Pc[a].slot[1]==Pc[a].slot[2])Pc[a].slot[2]=NULL;
と言うようになってまして、読みこんである画像を比較しようとしたのですがうまくいかなくて。
とりあえず
Pc[a].slot[1]=Pc[a].img[1][0]=LoadGraph("Sh\\img\\player\\suika.png");
Pc[a].slot[2]=Pc[a].img[1][0]=LoadGraph("Sh\\img\\player\\suika.png");
if(Pc[a].slot[1]==Pc[a].slot[2])Pc[a].slot[2]=NULL;
と言うようにして対処したのですが、どうも釈然としなかったもので。

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 23:26
by box
> 読みこんである画像を比較しようとしたのですがうまくいかなくて。

エラーメッセージなどの情報を添えて、
どんな風にうまくいかなかったかを明記してくださると、
どなたかが解決方法を提示してくださるかもしれません。

単に「うまくいかない」とだけいわれても、こちらには何も伝わってきません。

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 23:50
by kaiten
これは失礼しました。
エラーは出ていないのですが、
Pc[a].slot[1]=Pc[a].img[1][0]=LoadGraph("Sh\\img\\player\\suika.png");
Pc[a].slot[2]=Pc[a].img[2][0]=LoadGraph("Sh\\img\\player\\suika.png");
if(Pc[a].slot[1]==Pc[a].slot[2])Pc[a].slot[2]=NULL;
とするとPc[a].slot[1]==Pc[a].slot[2]が成り立たないようなんです。
Pc[a].slot[2]に代入するのをPc[a].img[2][0]からPc[a].img[1][0]に変更したら同一と認識してくれたので
Pc[a].img[1][0]==Pc[a].img[2][0]が成り立ってないということだと思うのですが、同じ画像なのに同じと認識してくれないので困っています。

Re:配列の中身の数値の比較

Posted: 2008年7月31日(木) 23:59
by box
配列 Pc をメンバーに含む構造体の定義を
提示していただけますか?

Re:配列の中身の数値の比較

Posted: 2008年8月01日(金) 06:52
by Mist
※二重投稿になってしまったのでこちらは削除します

Re:配列の中身の数値の比較

Posted: 2008年8月01日(金) 06:59
by Mist
> Pc[a].slot[1]==Pc[a].slot[2]が成り立たないようなんです。
> 同じ画像なのに同じと認識してくれないので困っています。
それはあたりまえ。
LoadGraphの戻り値はメモリ上に記憶した位置を表すハンドルです。
中身がどうであれ、1回目のロードと2回目のロードではそれぞれ違うエリアに保存されるのですから、ハンドル同士を比較しても意味がないです。

例えば
int a,b;

a = b = 1000;

if (a == b) // 中身の比較であれば一致する
if (&a != &b) // 記憶されている場所は違うのでアドレスの比較は一致しない

Re:配列の中身の数値の比較

Posted: 2008年8月01日(金) 11:35
by kaiten
皆さんありがとうございました。
LoadGraphの返り値がアドレスであるのを失念してました。
二の舞を演じないようDXライブラリのリファレンス一から読み直してきます(汗
今度こそ解決