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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
C++言語で、構造体のコピーは可能(しても良い)のでしょうか?
C言語・C++・C#
-
構造体の静的な初期化
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
-
4
構造体の初期化方法について
C言語・C++・C#
-
5
戻り値で構造体を返すことは可能でしょうか?
C言語・C++・C#
-
6
C言語での引数の省略方法
C言語・C++・C#
-
7
char*を初期化したいのですが
C言語・C++・C#
-
8
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
9
構造体のメンバをfor文で回したい
C言語・C++・C#
-
10
C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して
C言語・C++・C#
-
11
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
12
C++でCの構造体をnewするとまずいのでしょうか?
C言語・C++・C#
-
13
構造体メンバの初期化
C言語・C++・C#
-
14
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
15
C++にてtemplateで受け取った任意の型の変数が何型であるかを判定したい
C言語・C++・C#
-
16
戻り値を返す関数の前に(void)を付ける
C言語・C++・C#
-
17
C言語で構造体のメンバを簡単に出力する方法ありますか?
C言語・C++・C#
-
18
構造体のデータを丸ごとコピーしたい
C言語・C++・C#
-
19
#defineの定数を文字列として読み込む
C言語・C++・C#
-
20
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
Integer変数をカラにしたいので...
-
VBAのプログラムで、DIAG = 1# ...
-
long型のデータをバイト型の配...
-
「#undef」と「#define」の使い...
-
命名規則 VB 構造体
-
変数の初期化について
-
VBAの変数のデータ型を変更する...
-
charとucharの違い
-
構造体を型の異なる構造体に代入
-
FILE構造体がどのように定...
-
typedefをプログラム中で解除す...
-
VBAにてcolorindexを変数に格納...
-
C++/CLIの構造体のコンストラク...
-
VBAで符号無し整数
-
VB6.0の変数、関数の定義位置か...
-
VB.NETのStructureというのはど...
-
API,PathIsDirectoryについて
-
日付チェック関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
C++ 構造体の一括初期化 {0}
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
構造体のデータを丸ごとコピー...
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
異なる構造体のデータのコピー
-
ユーザー定義型変数の一括初期化
-
構造体の初期化方法について
-
typedefをプログラム中で解除す...
-
C言語 構造体の中に共用体を定...
-
charとucharの違い
-
日付チェック関数について
-
整数から16進数への変換 現在c...
-
値が代入されてない時
-
命名規則 VB 構造体
-
構造体にする理由・利点・使用例
おすすめ情報