- ベストアンサー
C言語 配列の長さの上限
i-kujouの回答
- i-kujou
- ベストアンサー率50% (13/26)
言語上の上限はsize_tの上限と一致するとは思いますが、そんなメモリをスタックに保有できるような環境は存在しません。 Windows上では一般的にスタックは1Mとかですから、実質的にはその半分の500kも確保できれば良いほうじゃないんでしょうか? C言語で長大な配列を確保したい場合は、動的配列にするのが常套手段ですが、それでも2Gなんて連続領域を確保することはほぼ不可能だと思います。
関連するQ&A
- C++言語の配列の呼び方,動的・可変長の違い
C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.
- 締切済み
- C・C++・C#
- 【PHP】配列を連想配列に
$m = array('a', 'b', 'c'); この配列 $m をもとに $n = array( 'a' => array( 'b' => array( 'c' => array()))); 上のような連想配列 $n をつくりたいのですが、 $n = array( $m[0] => array( $m[1] => array( $m[2] => array()))); 要素の数が固定のときは、これでもいいのですが、数が変動する場合に対応できません。 何か方法があれば教えてください。
- ベストアンサー
- PHP
- C言語の2次元配列における行・列指定
C言語初心者ですがよろしくお願いします。 C言語では、例えばint型の3行4列の2次元配列を表現するときに、 int array[3][4]; とするようですが、 必ず1つ目の[ ]で行番号を、2つ目の[ ]で列番号を表さなければならないものなのでしょうか。 もし慣習的にそうしているものなら、 行と列を指定する[ ]を入れ替えてプログラムを作成しても問題ないのでしょうか? というのも、メモリ上の割り当てが、 array[0][0] array[0][1] array[0][2] array[0][3] array[1][0] array[1][1] array[1][2] ... ... ... array[2][2] array[2][3] のようになるなら、 その配列をfwrite関数でバイナリデータに書きこんで、再度、列方向に読み込みたい時に、 あらかじめ書きこむ前のデータをarray[列][行]の形で扱っていった方が便利ではないかと思ったのですが、なにか初歩的な勘違いしてたりしますでしょうか? ご教授お願いします。
- ベストアンサー
- C・C++・C#
- C言語配列
c言語初心者ですよろしくお願いします。 ファイルから読み込んだ100万件のデータをstaticを使わずに配列に格納したいのですが。 どういった方法があるでしょうか? 私のpcでは変数名[10000]くらいがエラーのでない限界みたいです。
- 締切済み
- その他(学問・教育)
- C言語で巨大配列を作るにはどうすれば良いのでしょうか?
C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- C言語 配列を交えた関数
C言語にて配列を絡めた関数を作っています 配列には後にそれぞれの値を与えるのですが double total(int n){ int i; double total = 0; int y[NUMBER] ={0}; for (i = 0 ; i < n ; i++) { tota = tota + (combination(n,i) * power(i) * y[n - i]);} return (tota); } combinationは順列nCi powerは-1^iを表してあり 別々に表示させた場合問題なく出力されます printf("%lf\n" , res + combination(1,0) * power(0) * y[1] + combination(1,1) \ * power(1) * y[0] のようにして実行した場合もただしくでます しかしこれだとtotalを出力させたとき0となり(関数内で配列を初期化させているため?)={0}を消すと出力時に恐ろしい桁の数になってしまいます この関数をうまく作動させるための改善案をご指導願えませんか?情報不足で判断できない場合補足にて追加させていただきます 当方C言語初心者のため詳しくお願いいたします
- ベストアンサー
- C・C++・C#
- C言語 ポインタと配列
C言語で配列をあつかう場合、ポインタをつかうか、配列の添え字を使って処理するか迷うのですが、どちらが良いのでしょうか? 処理速度ではどちらが上でしょうか?
- ベストアンサー
- C・C++・C#