• ベストアンサー

配列の容量について

配列で、プログラムの実行時に容量を決定できる機能をつけたいのですがどういう方法があるでしょうか? 初心者ですので具体的に説明していただければありがたいです。

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

  • ベストアンサー
noname#119918
noname#119918
回答No.2

最初の方のソースコードを参考にして書いてみます。 構造体中の変数はポインタとしておき、 mallocで確保した領域をarrayポインタが指すようにします。 #include <stdio.h> #include <stdlib.h> typedef struct { int max; int* array; } stack; int main(void) { stack s; int i; int n; do { printf("いくつの領域がほしいですか?"); scanf("%d", &n); } while (n <= 0); s.max = n; s.array = (int*)malloc(sizeof(int) * n); for(i=0 ; i<s.max ; i++) { s.array[i] = 100 * i; printf("%d番目の値:%d\n" , i , s.array[i]); } free(s.array); return 0; }

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

ちょっとした例です。 #include <stdio.h> #include <stdlib.h> int main(void) {   int *p, n, i;      do {     printf("いくつの領域がほしいですか?");     scanf("%d", &n);   } while (n <= 0);      // 入力した値の分だけ、動的に領域を確保する   p = (int *) malloc(sizeof(int) * n);   if (!p)     fprintf(stderr, "out of memory\n"), exit(1);      // 動的に確保した領域は、あたかも配列であるかのように扱える   // 正確には配列ではなく、ポインタである   for (i = 0; i < n; i++) {     p[i] = 100 * i;     printf("%d番目の値:%d\n", i + 1, p[i]);   }      // 動的に確保した領域は、いらなくなったら開放する   free(p);   return 0; } (注)インデントのため、全角空白を使っています。

yamauetomo
質問者

補足

早速の回答ありがとうございます! では、 struct stack{ int max; int array[1000]; } のように最初に構造体で定義するときはどうしたらよいでしょう?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列データ容量とメモリについて

    プログラム中に、4バイトのデータを(2^24)×3個の配列に確保し計算するところがあるのですが、 この場合の配列のみのデータを メモリに確保するためのメモリの必要容量は 4×(2^24)×3=201326592バイト=201.32・・メガバイトになりますよね。 メモリはOSなどアプリケーションを立ち上げる時にも使いますが、それらの分を差し引いても、202MBぐらい空いてるとすれば上記のことをできるのでしょうか?  プログラムを実行すると 例外 unknown software exception (0xc0000fd)がアプリケーションの0x00401707で発生しましたと なって終了してしまいます・・ それとももともと確保できる容量はソフト的に決まってるのでしょうか。 ちなみに使用環境のPCのメモリは512MBのを一個刺してあります。コンパイラはVCです。

  • 配列のサイズを決めないプログラム

    プログラムの作成時に配列のサイズを決めないでプログラムの実行時に決めるという場合があると思います。 1.可変サイズとして配列の宣言 2.プログラム開始後、何らかの情報でサイズを決定する 3.確保された配列にデータを読み込ませたりして使用する ここで質問ですが、データを読み込ませて配列のサイズが決まる場合、上記の方法では不成立のように思います。2と3が逆だからです。処理するデータに応じて配列のサイズを変更する方法を教えて頂きたいのですが。そのような処理が可能になるとプログラムがデータの量と無関係(もちろん限度あり)となり汎用化されると思うのですが。どのようにするのでしょうか。基本はfortran95ですが、Cでの処理でも参考になるかと思います。

  • 配列をグローバル変数にとってやりたい

     今晩は、Cの初心者です宜しくお願いします。  今、ポインターを使わないでグローバル変数でサブルーチンから配列が使えるのかの勉強をしているのですが、 Cでは、配列をグローバル変数にとってやることは出来ないのでしょうか。  どうも正常にプログラムが実行出来ないのですが。  宜しくお願いします。

  • データ数の多い構造体配列について

    visual c++で配列をメンバーに持つ構造体配列を定義したいと思っています。 しかし、以下のように定義してもプログラムが実行されません。 配列の容量が大きいのかもしれませんが、 大量のデータを扱いたいので容量を小さくはしたくありません。 大量のデータを扱うのに何かいい方法はないでしょうか。 struct X { double A[1000]; }; : : : struct X B[10000];

  • 変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を

    変数と配列をそれぞれ説明しなさい.また,問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか,具体的な例を用 いて説明しなさい.という課題があるのですが、特に「問題によっては変数よりも配列を用いた 方が適切にプログラムを作成できる場合がある.どのようなケースか」というのがものすごくわかりにくいです。申し訳ありませんが教えてください。

  • プログラム言語の動的配列について

    動的配列という場合、配列のサイズがプログラム動作中に変化する、という意味でしょうか。 それとも、プログラム作成時に配列サイズが指定されておらず、外部のデータを読み込んでその時点でサイズが確定するという場合もあるかと思います。おなじことでしょうか。 なお、配列のサイズが指定されていないプログラムがあるとして、実行開始したあとから指定された配列サイズがメモリ容量とか制限によって上限値があるということにはなるかと思います。 また、大き目に配列を用意して実際に使用する場合、その一部しか使わないというのは通常のことだと思います。そのような場合は全く無関係だと思います。 データのサイズが違っても同じプログラムが使えるので1つ作ればあちこちに応用できることになると思います。このあたりのことがクリアになると同じことをするプログラムは1つだけあればいいということになります。 一応、C,C++,Fortran(77,95)という昔からある言語で、ということですが。 よろしくお願いします。

  • 大きな配列を使うには?

    BCCにJavaからポーティングしましたが、配列 int array[max]で、150000程度の大きさを超えると、メモリ不足で止まってしまいます。BCCかリンカのオプションで、ヒープやスタックサイズを変更する具体的な方法、または、大きな配列を上手く使う方法を教えてください。(プログラムはこんな感じ。) #define max_array 140000 /* このサイズを変更したい */ void main() { char array[max_array] ; この後、ヒープも使うのですが、(そのメモリ確保も必要)そこまで 行かない。。。。 (MSのVC++2005でも、同様になりました。) 10数年ぶりにプログラムをしている初心者です。 よろしくお願いします。

  • 2次元配列

    2次元配列は宣言して生成しますが配列名が異なる配列を例えば100個用意するにはいちいち宣言していたらすごいプログラム量になるので何かいい方法はないでしょうか?付け足しで指定した個数(例えば100個)分名前の異なる2次元配列を生成するには? java初心者なのでサンプルプログラムがあるとありがたいです。よろしくお願いします。

  • .net 2010VB配列TextBox貼り付ける

    初めて質問致します。 よろしくお願い致します。 超初心者レベルです。 VB6の時に、Formにテキストボックスやラベルなどを1つ貼り付け、それをコピーすると「配列にするか?」と聞かれていました。 今、.net 2010 VB でテキストボックス(ラベル)をコピーしても、配列にするかどうか聞いてくれません。 プログラム等ではなく、手動でFormに貼り付け時に、配列にする方法を教えて下さい。 (どのプロパティが、配列のインデックスなのかが分かりません。) <(__)>

  • 写真の容量を小さくしたい

    お尋ねします。 勝ったばかりのデジタルカメラで撮影した写真の容量が大きすぎて、困っています。 前のカメラは、ソフトがあって、小さくする機能があったのですが・・・ 今回のは、説明書にも、具体的な説明がなく、ソフトもないような感じです。 カメラ専用のソフトなど何もない「通常のパソコンの機能状態」で、jpg写真の容量を小さくする方法は、ありますでしょうか。 どうぞよろしくお願いいたします。

DP90Se解体
このQ&Aのポイント
  • DP90Se解体についての質問です。
  • 困っていることや、聞いてみたいことをお書きください。
  • 電子楽器メーカーローランド製品、ボス製品についての質問です。
回答を見る