
No.3ベストアンサー
- 回答日時:
> 一括初期化関数でも作るしかなさそうですね
static変数を初期化用に用意しておくのはいかが?
http://oshiete.goo.ne.jp/qa/2658268.htmlより
>静的記憶域期間をもつオブジェクトを明示的に初期化しない場合、
>次の規定に従う。
>a) そのオブジェクトの型がポインタ型の場合、空ポインタに初期化する。
>b) そのオブジェクトの型が算術型の場合、(正または符号なしの)0に初期化する。
>c) そのオブジェクトが集成体の場合、各メンバにa)~d)の規定を(再帰的に)
>適用し初期化する。
>d) そのオブジェクトが共用体の場合、最初の名前つきメンバにa)~d)の規定を
>(再帰的に)適用し初期化する。
なので、zero初期化されていることが、規格で保証されます。
typedef struct hoge_struct
{
int a;
int b;
} hoge_struct;
static hoge_struct initializer; //初期化用変数。値は変えない。
int main(void)
{
hoge_struct hoge;
hoge = initializer;
return 0;
}
真っ白に何度も初期化したいなら、こんな感じでどうでしょう?
関数を用意して初期化すると、構造体のメンバが増えると関数も修正しないといけない
ですが、これだと関数を変更しなくてすむし。
No.6
- 回答日時:
> 構造体変数に {0} を代入すると
{0}を代入することは原則としてできませんが、initializer_listということなら可能です。
std::vector<int> v;
v = {0};
といったことができますから。
ただし、代入後は1要素だけになってしまいます。
(その構造体とやらをどんな仕様にするかにもよりますが...)
No.5
- 回答日時:
> {0}は何?
{0}で初期化というのは、C言語の時からある手法ですね。
なにやら予約語のようにも見えますが、ただのカッコ0です。
例えば、初期化済み配列を宣言するとします。
int a[2] = {1,2};
これはa[0]=1,a[1]=2で初期化されるのは分かりますよね。
では、数が合わないとき
int a[2] = {1};
こんなとき、不足分は0で初期化されることが規格で保証されています。
つまり、a[0]=1,a[1]=0ですね。
ですから、全て0で初期化する場合は、
int a[2] = {0};
とすれば良いわけです。
数が多くても、型が違っても同様です。
char buf[128] = {0}; // ゼロで初期化
このことを知っていると理解しやすいと思いますがいかがでしょう。
No.1
- 回答日時:
> 構造体変数に {0} を代入すると
代入の右辺に {0} はかけないと思うけど。少なくとも私の環境ではコンパイルエラーになる。
初期化なら右辺に {0} を書くことができる。
この違いは分かるかな?
> なんでこんなことが出来るのでしょう?
規格で決まっているから。
規格そのものの文章は知らないけど以下に説明があります。
http://www.kijineko.co.jp/node/681
有難うございます。初期化の時だけでしたね。
ループの中で一括で初期化できれば便利だと思ったのですが、
一括で初期値に戻すのは無理みたいです。
一括初期化関数でも作るしかなさそうですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Word(ワード) ワードで,特定の文字だけ,字体を一括変換する方法は? 1 2023/04/26 10:11
- 人類学・考古学 エジプト神話に出てくるヌト神の身体に表現された星印はパッドを除いたキー構造を意図していませんか? 1 2022/11/10 11:48
- iPhone(アイフォーン) 以前使っていたSIMカード抜いた状態のiPhoneの 写真アプリの中のデータを一括削除して 『最近削 2 2022/05/20 03:00
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- 住民税 会社で退職手続きをした際、住民税?の支払いは会社の引き落としで一括(来月の給料)で支払うか、自分で支 2 2022/06/29 22:20
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
このQ&Aを見た人はこんなQ&Aも見ています
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
C言語での引数の省略方法
C言語・C++・C#
-
構造体の静的な初期化
C言語・C++・C#
-
-
4
CString から LPCTSTRの型に変換
C言語・C++・C#
-
5
char*を初期化したいのですが
C言語・C++・C#
-
6
charからLPTSTRへの変換方法
C言語・C++・C#
-
7
C++のfor文について
C言語・C++・C#
-
8
C++でboolにintの値を代入することについて
C言語・C++・C#
-
9
戻り値を返す関数の前に(void)を付ける
C言語・C++・C#
-
10
エディットボックスのフォントを変えたい
C言語・C++・C#
-
11
参照型で受け取った引数をポインター型に渡す方法
C言語・C++・C#
-
12
「#undef」と「#define」の使い方について
C言語・C++・C#
-
13
C++、クラスメンバの構造体配列の初期化について
C言語・C++・C#
-
14
最大化と最小化ボタン
C言語・C++・C#
-
15
初期化の対義語(反対語)はなんですか?
日本語
-
16
文字列の置換をCStringで(C++)
C言語・C++・C#
-
17
CPUの処理量を減らすコーディング(組み込み)
C言語・C++・C#
-
18
UMLのクラス図はmain()も含むんですか?
C言語・C++・C#
-
19
define で 配列
C言語・C++・C#
-
20
CFileDialogの最初のディレクトリ設定
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
構造体のデータを丸ごとコピー...
-
C言語 構造体の中に共用体を定...
-
「#undef」と「#define」の使い...
-
日付チェック関数について
-
整数から16進数への変換 現在c...
-
long型のデータをバイト型の配...
-
構造体の初期化方法について
-
VBAの変数のデータ型を変更する...
-
構造体のポインタにNULLが入らない
-
変数の初期化について
-
異なる構造体のデータのコピー
-
リッチテキストボックスの中身...
-
charとucharの違い
-
値が代入されてない時
-
構造体にする理由・利点・使用例
-
1バイトデータの読み出しについて
-
VBAにてcolorindexを変数に格納...
-
VB6.0の変数、関数の定義位置か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
VBAのプログラムで、DIAG = 1# ...
-
「#undef」と「#define」の使い...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
long型のデータをバイト型の配...
-
VBAにてcolorindexを変数に格納...
-
C言語 構造体の中に共用体を定...
-
VBAの変数のデータ型を変更する...
-
VBAで符号無し整数
-
typedefをプログラム中で解除す...
-
構造体のポインタにNULLが入らない
-
変数の初期化について
-
値が代入されてない時
-
charとucharの違い
-
構造体の初期化方法について
-
整数から16進数への変換 現在c...
-
命名規則 VB 構造体
-
日付チェック関数について
-
1バイトデータの読み出しについて
おすすめ情報