• ベストアンサー

C++/CLIで配列の初期値は0という認識で大丈夫でしょうか?

C++/CLIで配列の初期値は0という認識で大丈夫でしょうか? http://vene.wankuma.com/ecma372/24_cli_array.aspx のサイトを見たところデフォルト値という言い方されていますが、デフォルト値は0のことでよいでしょうか? あと、すべて1に初期化するなどの方法は用意されていますか? ご存知の方、回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

> デフォルト値は0のことでよいでしょうか? デフォルト値は配列の要素型によって異なります。整数型なら0、小数点数型なら0.0、bool型ならfalse、参照型ならnullです。 > すべて1に初期化するなどの方法は用意されていますか? ないので、自分で初期値を代入してください。

関連するQ&A

  • .NET C++/CLIのガーベジコレクションについて

    .NET C++/CLIのガーベジコレクションについて .NET C++/CLIで、マネージピープの配列をネイティブDLLにポインタ引数として渡す動作で、 配列が正常に渡っていることは確認したのですが、ネイティブDLL側で配列の処理をしている最中に、 ガーベジコレクションが起こり、誤動作することはあるのでしょうか。 ちなみに、マーシャリングは以下のように行いました。 // マネージ側コード [DllImport("native.dll")] void ArraySet( [MarshalAs(UnmanagedType::LPArray)] array <int> ^ Data ); array <int> ^ Data = gcnew array <int>(64); ArraySet( Data ); // この中で配列の処理中にガーベジコレクションが起こると誤動作?

  • C++/CLIについて

    現在C、C++を1部、WIN32を習得しているのですが、ウィンドウアプリケーションを作るときは全てWIN32APIを使用して作っています データベースを使ってみようと思い、VS2005(Pro)についていたSQLEEを使ってみようと色々と調べたんですが、ほとんどの書籍やサイトがVBかC#を使用していました しかし、VBやC#でプログラムを書き直すのも大変なのでどうしようかと思っていたらC++/CLIなるものの存在を知りました そこでC++/CLIの勉強をしてDBを使おうと思ったのですが、何分習得言語以外の知識が足りないため不安なところを質問させてください 以下質問 1、VB、C#、C++/CLIとC+WIN32の大きな違いは.NETFrameWorkが使えるか使えないかということであっていますか? 2、多くの書籍がVBやC#とDBを組み合わせているのは、.NETに含まれるADO.NETを使用するからですか? 3、C/C++を習得するとMFCを習得するのが一般的なようですが、MFCのメリットがイマイチわからないので教えてください(WIN32で十分代用可能なため) 4、C++/CLIを習得すればMFCは必要ありませんよね? 以上質問の数が多いですがよろしくお願いします

  • C++/CLIの構造体のコンストラクタについて

    C++/CLIの構造体のコンストラクタについて C++/CLIで、固定サイズの配列を持つ構造体を、次のようにコーディングして使っています。 value struct AAA { public:   array<unsigned short>^ m1;   AAA(unsigned short dummy)   {     m1 = gcnew array<unsigned short>(4);   } }; AAA ^struct0 = gcnew AAA(0); この方法で正常に動作するのですが、2点ほど気になる点があります。 (1) コンストラクタAAA(unsigned short dummy)を実装しなくても済む方法がないか? (2) この方法では、struct0を、ネイティブヒープ領域に割り当てられない (AAA *struct0 = new AAA(0))でコンパイルエラー) (1)と(2)は関連する気もするのですが、これらを解決する方法はあるのでしょうか?

  • C#,C++/CLI,MFCにおけるデータ型の対応と、メソッドへの渡し方

    現在、Visual Studio 2005の、Visual C#、C++/CLI、MFCを使ったシステムを構築しています。 具体的には、MFCで書かれたライブラリ(DLL)をC++/CLIでラップし、C#から呼び出して使うというものです。 現在は、http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_04.html http://msdn2.microsoft.com/ja-jp/library/ac7ay120(VS.80).aspx これらのサイトを参考にしながら、一部のMFCで書かれたメソッドを、C#から呼び出すことに成功しました。しかし、int型やHANDLE型などの、上記サイトに記述されているデータ型を用いたメソッドのラッピングや呼び出しはできたのですが、HDCやLPRECTなどの特殊な型の場合のやり方がよく分かりません。 具体的に現在分からないのは、次の通りです。 HDC(デバイスコンテキスト)、HWND(ウィンドウのハンドル)、CIRCLE,RECT等の構造体、LPRECTなどの構造体のアドレス、POINT*などの構造体のポインタ これらが、C#やCLIでどのような型になるのか、メソッドに渡す時にどのように記述するのかが分かりません。 以上、どなたか分かる方いらっしゃいましたら、ご回答をお願いします。

  • C++/CLIのDLLを、C#で参照した際の変数型

    現在、C++/CLIで作成したDLLを、C#で使おうとしています。 http://xptn.dtiblog.com/blog-entry-20.html 上記サイトを参考に、DLLを参照することはできたのですが、 C++/CLI側で「ulong」で定義した引数が、 C#で参照したとき「uint」に変わってしまっています。 【C++/CLI】  opensession(ULONG arg1, ULONG* arg2 ); 【C#】  opensession(UINT arg1, UINT* arg2); 調べてはいるのですが、 この原因がどうしてもわかりません。 ご教授のほど、よろしくお願いします。

  • C++/CLIでのDataGridViewの使い方

    以前に質問させていただいたのですが、要点を得ていなかったため再度質問させていただいきます。 VC++2005のC++/CLIでプログラムを作成しています。 CSVファイルから内容を読み込み、DataGridVeiwに表示させたいと考えています。 CSVファイルを配列に読み込んで、表示するところまでは出来ています。 以下CSVファイルを読み込んで、コンソール出力するプログラムの一部 int i; StreamReader^ sr=gcnew StreamReader("hoge.csv"); String^ text=sr->ReadToEnd(); array<String^>^ line=text->Split(gcnew array<String^> {"\r\n", "\r", "\n"},StringSplitOptions::RemoveEmptyEntries); array<array<String^>^>^ table= gcnew array<array<String^>^>(line->Length); for (i=0; i<line->Length; i++) { table[i]=line[i]->Split(','); } for each (array<String^>^ output in table){ for(i=0; i<output->Length; i++){ Console::Write(output[i]); //行出力 } } 初歩的なことだとは思うのですが・・・ コンソール出力部分をDataGridViewで出力表示させるには どのように書けばいいでしょうか。 よろしくお願いします。

  • C言語 初期化について

    はじめまして。 C言語を学習しております。 【初期化】の意味について混乱しております。 今まで、【初期化】とは下記のような繰り返しのある文に初期値(数え始めの値、下記の例では1)を代入することだと思っていました。 for (i = 1;i <= 10;i++) { printf("メッセージ\n"); } しかし、勉強が進むにつれ、下記のように様々な場面で【初期化】という言葉が出てきたことで、【初期化】の意味がわからなくなりました。 ●【文字変数の配列の初期化】の例 char str[6] = {'M','A','R','I','O'}; ●文字列リテラルを用いた【文字列の初期化】の例。 #include <stdio.h> int main(void) { char str[] = "MARIO"; printf("%s\n",str); return 0; } ●【配列の初期化】の説明 型名 配列名[要素数]={0番の数値,1番の数値,2番の数値,・・・}; ●【配列を初期化】して表示する例 #include <stdio.h> #include <stdio.h> int main(void) { int array[10] = {42,79,13}; printf("array[0] = %d\n",array[0]); printf("array[1] = %d\n",array[1]); printf("array[2] = %d\n",array[2]); printf("array[3] = %d\n",array[3]); printf("array[4] = %d\n",array[4]); return 0; } ●for文の説明 for (初期化;条件式;更新) { 繰り返す文; } 初期化とは、カウント変数の初期化を行うための文です。 ここに書かれた式は、最初に1回だけ実行されます。 【初期化】とは、場面場面で意味が変わるのでしょうか。 どの場面に通じる【初期化】の本来の意味を教えてください。 よろしくお願い致します。

  • VBで配列の初期化について

    VBやVBAで1次元・2次元配列を、プログラムの中の 値の(リテラル的)記述で初期化する方法はどうすれば良いのでしょうか。1次元配列にはx=Array()で代用してきましたが、さて、行と列がある表のような、値データを2次元配列にセットしようとして、ハテナと行き詰まりました。配列名(要素)=値を要素数だけ繰り返す方法以外に、例えば A[][]={(a、b、c)(d、e、f)(g,h,i)}のような、書き方は出来ないのでしょうか。 複数のArrayをArreyの()内に入れてみましたがも上手く行かないようですが。 有り無しについて教えていただけたらと思います。 市販の解説書数書には触れた記述は見つかりませんでした。

  • [C++/CLI]マネージコードで配列を作成してネイティブコードの配列にコピーしたい

    Visual C++ 2005のC++/CLIでプログラム作成しています。 C言語で書かれたプログラムを組み込みたい為に、 マネージコードでテキストファイル読み込みをして、2次元配列に格納し、 int型に変換してネイティブコードの配列にコピーしたいのですが、上手く書けません。。 テキスト内容は数字のみで2次元に並んでおり、1文字ずつ配列に入れたいです。 エラー出ているのですが、下記にコードを載せます。 #include<string> #include<vcclr.h> using namespace System; using namespace System::IO; int main(void){ //ファイルオープン StreamReader^ sr = gcnew StreamReader("hoge.txt"); int x, y; //ファイルの内容読込み for(y=0;;y++){ String^ line = sr->ReadLine();   //データ末尾まで読み込んだらループ終了 if(line == nullptr) break;    array<array<String^>^>^ table = gcnew array<array<String^>^>(line->Length);    int X=line->Length;    int Y=table->Length; //読み込んだ内容を表示 Console::WriteLine("<System::String表示>" + table);    //System::Stringのline内容(文字列)をコピーする変数   char tmp[128];   sprintf(tmp,"%s",line);   printf_s("<char配列> tmp=%s\n",tmp); //char*変数の内容表示   array<array<int>^>^ data= gcnew array<array<int>^>(Y,X); //int型に変換 for(x=0;x<X;x++){data[y][x]=atoi(table[y][x]);} } //ファイルのクローズ sr->Close();      return 0; } 汚く読みづらいコードで大変申し訳ありません。。 元はdefineで成分数(X,Y)を宣言していました。 しかし、読み込むファイル内容によって変えたく、arrayでLengthを使いました。 またこれ以外でいい方法がございましたら、どうか教えてください。 どなたか、ご教授よろしくお願いします。

  • 配列の初期化子 { .......} について

    配列の初期化子について、以下のような事がありました。 1. 一般に教科書で言われている事ですが、int a[3]={1} ; で初期化すると a[0]=1,a[1]=0,a[2]=0と初期化子が与えられていない要素は0で初期子されます。 2. 今度は,意地悪く全ての要素に初期化子を与えない a[3]={ } ; で初期化すると a[0]=0.a[1]=0, a[2]=0. と全てが0で初期化されました。←問題点 3. 初期化子を与えない int a[3] ; では a[0] a[1] a[2] は当然ながら不定値で初期化されます。 1と3については教科書通りですが、2についてはどの様に説明する事ができるのでしょうか。 標準Cに規定があるのでしょうか。それとも環境(コンパイラ)によるものでしょうか。尚私はRed Hat Linuxを使っています。 宜しく願います。