痔になりやすい生活習慣とは?

#define TMAX 100

int a[TMAX];
static int b[TMAX];

void main()
{
int c[TMAX];
static int d[TMAX];
}

上記、a,b,c,dの配列の要素において、未初期化の状態で0が保証される物はありますか?

また、宣言時に初期化 (a[TMAX]={0,0,0・・・0}) をする場合、0を100個書かなければなりません。
また、TMAXの値が変わるたびに書き換えなくてはなりません。
TMAX分、全て同じ値で初期化してくれる、便利な記述方法などありませんでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (14件中11~14件)

static変数はプログラム開始時に全要素0で初期化される。


だから、bとdは0が保証される。
    • good
    • 0
この回答へのお礼

staticならば保証されるのですね。初めて知りました。

ありがとうございます。

お礼日時:2008/09/02 10:00

ごめん new はC++だった。

。。
    • good
    • 0
この回答へのお礼

ありがとうございます。

c++においてnewなら保証されるのですね。
勉強になりました。

お礼日時:2008/09/02 10:00

無いね。


全部確保されるだけで内容不定。
ただ new で確保したなら話は別。

でも普通の初期化は TMAX というのを使ってforで回して代入でしょ。
newで確保しても結局内容的には同じ事をするわけだからforで回して0突っ込んだ方が(色々な意味で)早いと思うよ。
    • good
    • 0

>TMAX分、全て同じ値で初期化してくれる、便利な記述方法などありませんでしょうか?



for文
    • good
    • 0
この回答へのお礼

ありがとうございます。

やはりfor文が一番でしょうか。

お礼日時:2008/09/02 09:59

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q構造体の初期化方法について

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初期化したいと思っています。

よろしくお願い致します。

#define MAX 2000
//グローバル
struct tag{
int Npkt;
int gettime;
int rPkt;
int lossPkt;
}rdata[MAX];

main(){
  //for文で複数回実行処理
  for(i=0;i<=5;i++){
  //ここで構造体の初期化を記述する
//例として、5回プログラムを実行する
  }
}

こんばんわ。
何度も申し訳ありません。

VC++.NET 2003を用いてコンソールプログラミングを行っています。前回この掲示板を利用して複数回実行するプログラムを作成し、そこに構造体を用いたプログラムを作成しました。以下に概要を示します。

グローバルで構造体を宣言しているため、複数回実行を行うプログラムでは前回の値が格納されたままであると思い、毎回実行時に構造体の初期化を行いたいと思っています。

そこで、以下に示します構造体の初期化はどのように記述すればよいのでしょうか?0で初...続きを読む

Aベストアンサー

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
memset( &rdata[i], 0, sizeof(struct tag) ); です。
※rdata[i]の1データだけ初期化します。

余談:
・『ZeroMemory』関数は Win32 API と分類されていますが、実体は『memset』関数に
 『#define』されているだけです。でも、戻り値を『VOID』型にキャストされているので
 『memset』関数のリターン値を取得できません。→第一引数のアドレスが『memset』関数
 ではリターンします。
・以上。おわり。

参考URL:http://taka.no32.tk/tips/Win32/ZeroMemory.html

★まとめ
・既に『memset』関数や、『ZeroMemory』関数の回答があるので構造体の全体、1部の
 初期化の記述例を紹介します。
・それと『#include <memory.h>』を記述しないとメモリ関係の関数が利用できません。
 『ZeroMemory』関数の場合は『#include <windows.h>』があればそのまま利用できます。

●構造体全体を初期化
ZeroMemory( rdata, sizeof(rdata) ); または、
memset( rdata, 0, sizeof(rdata) ); です。

●構造体一部を初期化
ZeroMemory( &rdata[i], sizeof(struct tag) ); または、
m...続きを読む


人気Q&Aランキング