配列の中身の数値の比較
配列の中身の数値の比較
配列の中身の数値が一致しているかどうかを調べたいのですが、グーグル先生はどうも文字列の場合ばかり出してくれちゃうのでここで質問させていただきます。
a[0]==a[1]のようにすると配列のアドレスを比べてしまったと思うのですが、肝心の中身の比較のし方を忘れてしまいまして。memcmpはやっぱり文字列ですし。
a[0]==a[1]のようにすると配列のアドレスを比べてしまったと思うのですが、肝心の中身の比較のし方を忘れてしまいまして。memcmpはやっぱり文字列ですし。
Re:配列の中身の数値の比較
> memcmpはやっぱり文字列ですし。
memcmpはメモリに書かれている値の一バイトずつの比較なので、それが文字列であるかどうかなんて関係ないです。
memcmpはメモリに書かれている値の一バイトずつの比較なので、それが文字列であるかどうかなんて関係ないです。
long a[2]; a[0] = 100; a[1] = 100; if (!memcmp(&a[0], &a[1], sizeof(long)) { printf("一致\n"); }こんなめんどくさいことする人はいないと思いますが(^-^;
Re:配列の中身の数値の比較
ではお言葉に甘えて
とりあえず
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:配列の中身の数値の比較
> 読みこんである画像を比較しようとしたのですがうまくいかなくて。
エラーメッセージなどの情報を添えて、
どんな風にうまくいかなかったかを明記してくださると、
どなたかが解決方法を提示してくださるかもしれません。
単に「うまくいかない」とだけいわれても、こちらには何も伝わってきません。
エラーメッセージなどの情報を添えて、
どんな風にうまくいかなかったかを明記してくださると、
どなたかが解決方法を提示してくださるかもしれません。
単に「うまくいかない」とだけいわれても、こちらには何も伝わってきません。
Re:配列の中身の数値の比較
これは失礼しました。
エラーは出ていないのですが、
Pc[a].slot[2]に代入するのをPc[a].img[2][0]からPc[a].img[1][0]に変更したら同一と認識してくれたので
Pc[a].img[1][0]==Pc[a].img[2][0]が成り立ってないということだと思うのですが、同じ画像なのに同じと認識してくれないので困っています。
エラーは出ていないのですが、
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:配列の中身の数値の比較
> Pc[a].slot[1]==Pc[a].slot[2]が成り立たないようなんです。
> 同じ画像なのに同じと認識してくれないので困っています。
それはあたりまえ。
LoadGraphの戻り値はメモリ上に記憶した位置を表すハンドルです。
中身がどうであれ、1回目のロードと2回目のロードではそれぞれ違うエリアに保存されるのですから、ハンドル同士を比較しても意味がないです。
例えば
int a,b;
a = b = 1000;
if (a == b) // 中身の比較であれば一致する
if (&a != &b) // 記憶されている場所は違うのでアドレスの比較は一致しない
> 同じ画像なのに同じと認識してくれないので困っています。
それはあたりまえ。
LoadGraphの戻り値はメモリ上に記憶した位置を表すハンドルです。
中身がどうであれ、1回目のロードと2回目のロードではそれぞれ違うエリアに保存されるのですから、ハンドル同士を比較しても意味がないです。
例えば
int a,b;
a = b = 1000;
if (a == b) // 中身の比較であれば一致する
if (&a != &b) // 記憶されている場所は違うのでアドレスの比較は一致しない
Re:配列の中身の数値の比較
皆さんありがとうございました。
LoadGraphの返り値がアドレスであるのを失念してました。
二の舞を演じないようDXライブラリのリファレンス一から読み直してきます(汗
今度こそ解決
LoadGraphの返り値がアドレスであるのを失念してました。
二の舞を演じないようDXライブラリのリファレンス一から読み直してきます(汗
今度こそ解決