質問があります。
C言語の構造体の初期化についてですが
最初は※1のようにすれば構造体のメンバが全部初期化
されると思っていましたが、data_set[SIZE]の配列は
SIZE分だけ初期化する必要があるそうなのですが
どうすればいいのかわかりません。
どなたかアドバイスお願いします。
環境はボーランドを使っています。
typedef struct {
long data_set[SIZE];
long data_head;
long data_number;
long data_new;
long data_index;
long data_count;
long data_location ;
}DATA;
DATA data_data;//変数を使うために宣言 DATAは型でdata_dataは変数
void init(void)//初期化
{
DATA data_data = { 0,0,0,0,0,0 };※1 初期化
}
構造体の初期化について
Re:構造体の初期化について
変数 data_data を、関数の外で定義したいのですか?
それとも、init 関数の中で自動変数として定義したいのですか?
どちらの方法を採りたいかによって、明示的な初期化が
必要かそうでないかの違いがあります。
それとも、init 関数の中で自動変数として定義したいのですか?
どちらの方法を採りたいかによって、明示的な初期化が
必要かそうでないかの違いがあります。
Re:構造体の初期化について
すいません。。
説明不足でした。
変数 data_data を、関数の外で定義します。。
そして{{0, 0,・・・}, 0, 0, ・・・} のようにも
考えたのですがSIZEのところをfor文で回したいと考えています・・
説明不足でした。
変数 data_data を、関数の外で定義します。。
そして{{0, 0,・・・}, 0, 0, ・・・} のようにも
考えたのですがSIZEのところをfor文で回したいと考えています・・
Re:構造体の初期化について
> void init(void)//初期化
> {
> DATA data_data = { 0,0,0,0,0,0 };※1 初期化
> }
この場合だと、全てのメンバを 0 で初期化するなら、
DATA data_data = {0};
でいいです。
> {
> DATA data_data = { 0,0,0,0,0,0 };※1 初期化
> }
この場合だと、全てのメンバを 0 で初期化するなら、
DATA data_data = {0};
でいいです。
Re:構造体の初期化について
一般的に構造体をとにかく0で初期化したいときは
ZeroMemory(data,sizeof(data))を使います
これがエラーを吐くようならmemset(data,0,sizeof(data))を利用してください
ZeroMemory(data,sizeof(data))を使います
これがエラーを吐くようならmemset(data,0,sizeof(data))を利用してください
Re:構造体の初期化について
ZeroMemory は Win32API に属しているんですよね?
ということは、環境によって使えない場合がありますので、
一般的とはいえないと思います。
一方、memset は C言語の標準関数です。
おそらくすべての Cコンパイラーで使えるはずです。
したがって、どちらが一般的かといえば、memset の方です。
ということは、環境によって使えない場合がありますので、
一般的とはいえないと思います。
一方、memset は C言語の標準関数です。
おそらくすべての Cコンパイラーで使えるはずです。
したがって、どちらが一般的かといえば、memset の方です。
Re:構造体の初期化について
構造体のメンバがすべて整数型であれば実質的な問題はありませんが、ZeroMemoryであろうがmemsetであろうが、そのような方法でゼロクリアするのは一般的とはいえません。
http://www.kijineko.co.jp/tech/supersti ... emset.html
一般的には、
DATA data_data = {0};
が正解です。
http://www.kijineko.co.jp/tech/supersti ... emset.html
一般的には、
DATA data_data = {0};
が正解です。