• 締切済み

数配列の長さ

あらかじめ決まってないint型の配列の長さはどうのようにして求めたら良いのでしょうか? int array[100];で宣言して実際に数字が入るのは100以下の様な状況 sizeofで調べると100になってしまうので配列の最後に@マークを代入して長さを調べてたのですが何か適切な方法はありますか? プログラミング初心者なのでこれ以上思いつかなかったので適切な方法があればよろしくお願いします。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.3

>sizeofで調べると100になってしまうので配列の最後に@マークを代入して長さを調べてたのですが何か適切な方法はありますか? int array[100]; をsizeof(array)で調べると100になるということですか? sizeof(int)が1の環境でないとありえませんが。 arrayにいくつ数字が入っているかは、それ用の変数を用意してください。 値として入るのが0以上という条件があれば無効な部分には負数をいれておいて0以上の値の入ってる数を調べるというのもあります。 @マークを代入してというのは array[0] = '@'; みたいなことだと思いますが64('@'の文字コードの値0x40)が使用できませんので不適切です(数字として64が入ることはないというならありですけど)。

回答No.2

これをやりたいんですかね? 配列を自由自在に作る: https://9cguide.appspot.com/19-01.html#S2

ashitanotenki11
質問者

お礼

ありがとうございました

  • maiko0333
  • ベストアンサー率19% (840/4403)
回答No.1

100個作っていますからarray[0]からarray[99]まで作成されています。 array[100]はありませんのでご注意。

関連するQ&A

  • 配列で分かりません

    教えてください。プログラミング初心者です。 以下の配列があった場合に最終行の$abc[ ] = $abc;は何を代入しているのでしょうか? $abc = array( ); $abc[ ] = $ def; $abc[ ] = $ abc; 宜しくお願いします。

    • ベストアンサー
    • PHP
  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

    • ベストアンサー
    • Java
  • 配列

    最後にもう一つだけお願いします。ずっと格闘しても解決できません・・ 配列の中の数字で、偶数を全て奇数の前にもって行きます 例) {1,0,1,0,0,1,1} → {0,0,0,1,1,1,1} {3,3,2} → {2,3,3} {2,2,2} → {2,2,2} 流れとしては、まず奇数の数を数えます。これは何回シフトするから知るためです。 配列0から奇数を探し、あればそれを一番最後の配列へとシフトします。 奇数を探す作業が一度終わっても、まだシフトさせないといけない奇数があるかもしれないので(奇数が連続で並んでる場合)、最初に数えた奇数の数分だけちゃんとシフトするようにしようと思います。 public void evensLeft(int[] array) { int odd=0; for (int i = 0; i < array.length; i++) { if(array[i]%2!=0) odd++; //奇数の個数 } while (odd>0) { //奇数分シフトするためのカウント for(int j=0;j<array.length;j++){ //奇数を探す if (array[j] % 2 != 0) { odd--; //奇数のカウントを1減らす for (int k = j; k < array.length-1; k++) { //その奇数を一番最後に移動 int temp = array[k+1]; array[k+1] = array[k]; array[k] = temp; } } } } return array; } いくつかの例では動くのですが、{3,3,2}の例だと配列0に3が来てしまいます。色々変えてみても結果無理でした・・・ どなたかご教授お願いします。

    • ベストアンサー
    • Java
  • 配列の配列をmemcpyやmemcmpしたいです

    【環境】WindowsXP(SP2)、VisualStudio2005++(MFC) タイトルの通りなんですが、配列の配列を比較したりコピーしたいのですが、以下に質問を3つ記載させていただきますので、どなたかご教授お願いいたしますm(__)m 1.宣言と初期化について char **buf; buf = new char*[3200]; for(int i=0; i < 3200; i++) { buf[i] = new char[4]; } これで、buf[1]、buf[2]、buf[3]、buf[4]に、それぞれ3200のchar型の配列が宣言された事になりますでしょうか? ※buf[4][3200] なのか buf[3200][4]なのかよく分からないです。 2.上記の方法で定義した2つの配列(bufとtmp)の比較 for(int i =0; i < 4; i++) { memcmp (buf[i], tmp[i], sizeof(tmp[i])); } これで比較出来ますでしょうか? 3.上記の方法で定義した2つの配列(bufとtmp)のコピー for(int i =0; i < 4; i++) { memcpy_s(buf[i], sizeof(buf[i]), tmp[i], 3200 * sizeof(char)); } これではバッファオーバーランエラーが発生してしまうのですが、どこがおかしいでしょうか? 以上3点、初心者の質問なので意味が分からないような箇所があるとは思いますが、どうかご教授お願いいたしますm(__)m  

  • delphi 2次元配列がわかりません

    将棋盤の様な9×9マスの配列宣言を a1 : array[1..9, 1..9] of Integer ;とした場合、a1に値を 代入するにはどんな式が考えられますか? a1 : array [1..9] of integer = (394,448,502,556,612,664,721,774,827); みたいに直接括弧内で 代入も可能でしょうか? 超初心者で頭の中で混乱してしまいます。 どなたかお助け下さい。

  • STLのvectorで作った配列をメンバ変数にする場合は。。。

    C++初心者です。 STLのvectorで作った配列をメンバ変数は 以下のように宣言し、 class Array { public: vector<int> array; void Set(); } Array::Setのメンバ関数でarrayに値をセットします。 そして、メインからarrayを参照しようとしましたが 値が入っていませんでした。 メンバ変数の宣言の仕方が良くないのですか?

  • 配列と変数について

    練習のため家庭の収入、支出のバランスを計算するプログラミングを作っています。その為変数宣言についてなのですが以下のようにすると配列をcoutした時にint の変数に代入した値と一致しません。意味不明な数字が表示されます。この時何が起きているのでしょうか(この数字はどこから?各配列には何が入っているのでしょうか?)。 #include <iostream.h> int main (){ int income, loan, expenditure, saving; int cluster []={income, loan, expenditure, saving}; income=100, loan=200, expenditure =300, saving = 500; cout << cluster [0]<<endl<<cluster [2]<<endl<<income<<endl<<expenditure; return 0; } しかしながら以下のように変数の初期化を配列への代入の前に行うと各配列と変数の値が一致します。何故ですか? #include <iostream.h> int main (){ int income, loan, expenditure, saving;      income=100, loan=200, expenditure =300, saving = 500; int cluster []={income, loan, expenditure, saving}; cout << cluster [0]<<endl<<cluster [2]<<endl<<income<<endl<<expenditure; return 0; } 2.今回配列を使ったのはこれらの変数をまとまりとして取り扱ったほうが便利だと思ったからです。この様な場合クラスを作ったほうが良いのでしょうか?メモリ的に配列の方がまとまりが良いように感じましたが、そんな考慮は必要ないのでしょうか? 3.変数名を表示することは出来ますか?上記のincome、savingなどです。

  • 2次元配列について

    プログラミング初心者です。先日以下の例文を問い合わせさせていただきました。 答えとして$abc[0] に $def を代入して、$abc[1] に $abcという配列([0] に $def の内容がある)が代入されると教えていただき、実際確認しました。二次元配列入れ子のようになるのは解ったのですが、 どのような場合に使うのでしょうか? ホームページなどの画面に表示するのに使ったりするのでしょうか? それともデータベースからデータを抽出して一時的に、何らかのかたちで格納 したりする場合によく使われるのでしょうか? この例文だけどこかにあったので、実際どのように使うのかイメージできません。 すみません。教えてください。 <?php $def = 'test'; $abc = array(); $abc[] = $def; $abc[] = $abc; print '<pre>'; print_r($abc); print '</pre>';

    • ベストアンサー
    • PHP
  • 整数型の配列を文字型の配列にコピーするとき

    こんばんは。 いつもお世話になっています。 また初歩的な質問で申し訳ないのですが、どうかよろしくお願いします。 今、プログラミングの本を見ていたら、snprintfを使って、 整数型配列の1つの要素を文字型配列にコピーしている箇所がありました。 そのときに、 int i[2]; char ch[3]; snprintf(ch,sizeof(ch),"%d",i[0]); のようにあったのですが、なぜこのとき文字型配列は要素数が3で宣言しておく必要があるのですか? (今i[0]に何が入っているのかはわかりませんが、3~1024までの整数であることは確かです。) どなたかお答えお願いします。

  • 動的に確保した配列のファイルへの書き出し

    動的に確保した配列を、ファイルに書きだそうとしています。 int i, arraysize = 10; int **array; array = new int*[ arraysize ]; for (i = 0 ; i < arraysize ; i++) array[ i ] = new int [ arraysize ]; ofstream out("filename", ios::out | ios::binary); out.write((char *) array, sizeof( array )); これでは array のポインタが書き込まれるだけ、なのかな ? ということで、配列を書き込む目的を果たせておりません。このように動的に確保した多次元配列 (要素数は既知) をファイルに書き込むためにはどうすればよろしいでしょうか。

専門家に質問してみよう