はじめまして。C言語初心者となります。
以下の疑問があり、質問させて頂きました。
以下のST1型の構造体が配列として定義されていた場合、
その配列インデックスの一つにST2型の内容で保存を
行いたい場合にはどのようにすればよいのでしょうか?
構造体としてのサイズは同じなので扱う事は可能(?)と思うの
ですが、キャストすれば良いのでしょうか?
上記の認識が正しい場合、どのようにキャストを行えばよいのでしょうか?
typedef struct st1 {
unsined short us_data1;
unsined short us_data2;
unsined long ul_data3;
} ST1;
typedef struct st2 {
unsined short us_data5;
unsined short us_data6;
void* v_ptr;
} ST2;
初歩的な質問で、誠に恐縮ですが、
お分かりになられる方がいらっしゃいましたら、
ご教授の程、宜しくお願い致します。
構造体について質問があります
Re:構造体について質問があります
> > 構造体としてのサイズは同じなので
>
> そう考えるのは危険です。
> とりあえず、共用体を利用することを考えましょう。
>
貴重なご意見、本当にありがとうございます。
そうですね、危険ですよね。。。
質問の仕方が悪く、大変申し訳ありません。
本件、課題にて構造体で扱うように指示されており
(サイズ等が変更されることは考えなくてよい)
質問させて頂きました。
大変お手数ですが、お分かりになられる方がいらっしゃいましたら、
ご教授の程、宜しくお願い致します。
>
> そう考えるのは危険です。
> とりあえず、共用体を利用することを考えましょう。
>
貴重なご意見、本当にありがとうございます。
そうですね、危険ですよね。。。
質問の仕方が悪く、大変申し訳ありません。
本件、課題にて構造体で扱うように指示されており
(サイズ等が変更されることは考えなくてよい)
質問させて頂きました。
大変お手数ですが、お分かりになられる方がいらっしゃいましたら、
ご教授の程、宜しくお願い致します。
Re:構造体について質問があります
> メンバーを一つずつコピーすればいいのではないでしょうか。
> 構造体をまとめてコピーは無理なんじゃないでしょうか?たぶん。
>
>
ご意見・ご見解頂き、ありがとうございます。
> メンバーを一つずつコピーすればいいのではないでしょうか。
> 構造体をまとめてコピーは無理なんじゃないでしょうか?たぶん。
おっしゃるとおりと思います。
ST1のul_data3にST2のv_ptrを代入する時に 間接参照のレベルが異なる
warning(C4047)となってしまう為、キャストにて回避を考えているのですが、
どのようにキャストを行えばよいのかがわかりません。
どなたかお分かりになられましたら、ご教授、宜しくお願い致します。
> 構造体をまとめてコピーは無理なんじゃないでしょうか?たぶん。
>
>
ご意見・ご見解頂き、ありがとうございます。
> メンバーを一つずつコピーすればいいのではないでしょうか。
> 構造体をまとめてコピーは無理なんじゃないでしょうか?たぶん。
おっしゃるとおりと思います。
ST1のul_data3にST2のv_ptrを代入する時に 間接参照のレベルが異なる
warning(C4047)となってしまう為、キャストにて回避を考えているのですが、
どのようにキャストを行えばよいのかがわかりません。
どなたかお分かりになられましたら、ご教授、宜しくお願い致します。
Re:構造体について質問があります
> これでいいのでは?
> ST1 s1[10];
> ST2 s2;
>
> s1[0].ul_data3=(unsigned long)s2.v_ptr;
>
>
>
貴重なご意見ありがとうございます。
大変申し訳ありません。本件、根本的に勘違いをしており、
自己解決致しました。
個別のデータ(s2.v_ptr)をキャストして代入するのではなく、
ST1型配列のインデックスのアドレスをST2型ポインタに代入し、
そのポインタにてST1型配列にアクセスすればよかったのですね。。。
拙い質問に答えて下さりました方々、本当にありがとう御座いました。
これからも質問をさせて頂く事もあるかと思いますが、
その際も宜しくお願い致します。
> ST1 s1[10];
> ST2 s2;
>
> s1[0].ul_data3=(unsigned long)s2.v_ptr;
>
>
>
貴重なご意見ありがとうございます。
大変申し訳ありません。本件、根本的に勘違いをしており、
自己解決致しました。
個別のデータ(s2.v_ptr)をキャストして代入するのではなく、
ST1型配列のインデックスのアドレスをST2型ポインタに代入し、
そのポインタにてST1型配列にアクセスすればよかったのですね。。。
拙い質問に答えて下さりました方々、本当にありがとう御座いました。
これからも質問をさせて頂く事もあるかと思いますが、
その際も宜しくお願い致します。