• ベストアンサー

Cなどで要素の数が固定できない配列はどうやって実現しますか?

配列について質問します。 BASIC系では配列は動的配列で要素の数が自由に変えられます。 ですが、C等では宣言時に配列の要素の数を決めておかねばならなかったと思います。 もし、C等で要素の数がわからないけど、配列を使いたい場合、どうすればいいのでしょうか? どのように実現するのでしょうか? 配列と同じ使い勝手なら配列でなくともかまいません。 今はVBAでプログラムを組んでいるので、動的配列を使えばすむのですが、いずれ他の言語に移植したいので、できるだけ使わないようにしたいと思っています。 よろしくお願いいたします。

noname#224929
noname#224929

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

  • ベストアンサー
  • yukimican
  • ベストアンサー率70% (112/159)
回答No.2

malloc等のメモリ確保はNo.1さんの回答のリンクが詳しいですね。 C言語でプログラムを組む場合は、大抵はこれらメモリ操作関数のお世話になります。 これに加えて、C++やJavaのライブラリでは、動的配列クラスというものが使えます。 C++だとvectorやlist、JavaだとVectorやArrayListあたりですね。 他にも、言語や環境に依存したライブラリ、フレームワークで 様々な動的配列の機構が用意されていたりします。 簡単にまとめると、 ・malloc、free、realloc等を使う方法 → ReDim ・動的配列クラス → Collection のようなものだと考えてください。

noname#224929
質問者

お礼

ありがとうございます。具体的に例を挙げていただいたので、イメージがとてもわきました。No.1さんの回答とあわせると、理解が深まりました。どうもありがとうございます。

その他の回答 (2)

回答No.3

C/C++なら配列使わないで構造体+ポインタでチェーン構造作るのはためなの?

noname#224929
質問者

お礼

ありがとうございます。知識不足でピンときませんでしたが、今後取り組む際にはぜひ参考にさせていただきます。

  • ballville
  • ベストアンサー率47% (233/487)
回答No.1

mallocを使います。 いいサイトがありましたので、 書いておきます。 http://homepage3.nifty.com/mmgames/c_guide/19-01.html

参考URL:
http://homepage3.nifty.com/mmgames/c_guide/19-01.html
noname#224929
質問者

お礼

ありがとうございました。とても参考になるサイトでした。Cの知識をかなり忘れていたのでちょっと理解しにくいところもありましたが、なんとなく理解できました。もう一度C系の言語にチャレンジするときはぜひ参考にさせていただきます。

関連するQ&A

  • 要素数・要素の値が未定の配列の宣言について(C言語)

    要素数・要素の値が未定の配列の宣言について(C言語) タイトルの通りプログラムの内容上、要素の数とその数値がプログラムの途中で算出されるため 最初の宣言の段階では両方ともその数が未定です。 こういった場合、配列の宣言はどのようにすればよろしいのでしょうか? どなたか教えていただけるととても助かります。よろしくお願いします。

  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?

  • 配列とその要素数をメンバにもつ構造体

    C言語では,配列を引数とするときに,合わせて要素数を渡さなければいけないといわれます. そこで,配列とその要素数をメンバにもつ構造体を定義して,これを要素数つき配列のように扱えば,引数として渡す場合には,この構造体を渡すだけでよいと思うのですが,このような用法は一般的に用いられているでしょうか. 単純なアイデアだと思うんですが,あまり紹介されているのを見たことがありません. もしあまり用られない用法であれば,その理由を教えてください. 現在,プログラムを書いているのですが,引数の多さに閉口しており,上の考えで,引数を減らしたいと考えています.  よろしくお願いいたします.

  • 配列の要素数を超えた参照のコンパイル

    C言語においては”配列の要素数を超えての参照もコンパイルエラーにはならない”という事がいえます。 例えば int a[10]={1}; とした時、a[-1] a[11]を参照しても、コンパイルエラーにはなりません。不定値が表示されるか、Red Hat Linuxに関しては”セグメンテーション違反です”とでるだけです。 しかし、わたしはCしか学んではいませんので解りませんが、配列の要素数を超えての参照はコンパイルエラーになる言語もあるのではないかと思います。 C言語はよく”暴走する言語”と言われます。規制をできる限り排除して軽くし、ミスはプログラマが取るという意味に考えています。 ”C言語においては配列の要素数を超えての参照もコンパイルエラーにはならないという事”はC言語のその様な設計思想に基ずいた仕様なのでしょうか。 それとも、違う考えに基ずいて、”配列の要素数を超えての参照もコンパイルエラーにはならない”という事に成っているのでしょうか。 宜しく願います。

  • 配列の要素数

    配列の要素数を求めるプログラムを作りたいのですが

  • 配列の要素数に変数を入れたいときには

    よろしくお願いします。 配列の要素数には定数しか入れられないのですが,どうしても変数を入れたいときは,それを引数として関数を呼び出すしか方法はないでしょうか。 具体的には,scanfで手に入れたint型の変数を要素数とする配列を宣言したいのですが,どうすれば良いでしょうか。 ご教授ください。

  • C♯の配列について

    C♯でプログラムを作っているのですが、配列の要素数の最大値と最小値の求め方がわかりません。配列の値の最大値の求め方は調べれば出てくるのですが、要素数の最大値等は調べてもわかりませんでした。 例えば下記のような配列があった場合 int[,,] a =new int[100,100,100] a[2,3,6]=1 a[4,5,9]=1 a[13,46,79]=1 a[8,15,45]=1 a[1,33,68]=1 それぞれの要素数の最小値1、3、6、最大値13、46、79は どのようにプログラムで求めればいいのでしょうか? よろしくお願いします。

  • VB.net 引数で配列変数を渡す際の要素数

    VB.net 2010 の質問です。 配列変数を他のプロシージャに引数で渡す際の、配列変数の要素数をあらかじめ宣言していないとエラーになります。 Dim Hairetsu() As String ' ←エラー Dim Hairetsu(100) As String ' ←正常 Public Sub aaa(ByRef Hairetsu() As String) Hairetsu(0) = "Test" '←正常の場合と、エラーの場合 End Sub Hairetsu(100) のように、要素数を宣言していると、エラーにならないのですが、 プログラム中、要素数がどこまで増加するか、分かりません。 Hairetsu()のように、要素数未確定の配列変数を渡すことは出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、なにとぞアドバイスの程、よろしくお願いいたします。

  • VB.NET の配列の要素数

    VB.NETで List(Of String()) の多次元配列を宣言したとします。 Listの要素数とListの中のStringの要素数はどのように確認すれば わかるでしょうか? どうぞ、よろしくお願いいたします。

  • perl 配列の要素数について

    配列の要素数について質問させていただきます。 プログラムの中で、以下のようにファイルの内容を1行ずつ読み込み、配列に入れています。  open (IN, "ファイル名");  @data = <IN>;  close (IN); こういった形で配列に入れていった場合、入れられる最大行数(=最大要素数)はどれくらいになるのでしょうか。 現在100万行のテキストファイルは、問題なく読み込めているようでした。 ご存知の方がおられましたら、ご回答いただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう