🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

4回答

1138閲覧

C言語で配列を何個使用したかを調べる方法

key__0

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/09/29 15:02

編集2019/09/29 15:05

ソースコード

#include <stdio.h> int main(int argc, char* argv[]) { int array[10]; array[0] = 1; array[1] = 2; return 0; }

質問

上のプログラムのように宣言した配列を全て使い切らなかった場合、何個使用したかをプログラムで求めることは可能でしょうか?
配列のサイズ ÷ 配列の型のサイズで宣言した要素数を求めることはできると思うのですが、使用された個数を求める方法がわかりません。

補足

自分で代入した要素以外は初期化しないという条件付きです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/09/29 22:31

これはクイズですか? それとも何か実用上の目的がありますか? あるとしたら、それを書いた方が手っ取り早いと思います。この方法を探っていっても遠回りになるだけです。
guest

回答4

0

上のプログラムのように宣言した配列を全て使い切らなかった場合、何個使用したかをプログラムで求めることは可能でしょうか?

できません。必要ならカウンタを保持して下さい。

C

1int i = 0; 2array[i++] = 1; 3array[i++] = 2; 4 5printf("いま%d要素\n", i); // いま2要素

自分で代入した要素以外は初期化しないという条件付きです。

文字列配列のように番兵を置くのも有力ですが、この条件にはそぐいませんね。

投稿2019/09/29 15:08

編集2019/09/29 15:12
LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「絶対に代入しない値」がもしあれば、その値で初期化しておくことにより、先頭からその値が出てくるまでが使ったものです。

普通は、いくつ使ったかを変数で保持します。でないと、次にどこを使うのか決められない。

投稿2019/09/29 15:21

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

昔(今でも?)のPascalの文字列の様に、配列の先頭(0番目)にカウンタをもたせるのはどうでしょう?
で、配列は1から使う。ただし、文字の配列の場合char1個分なので0〜255までですが。intとかならもっと使えるでしょう。

投稿2019/10/02 10:19

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

パッと思いつく一番簡単な方法は
同じ次元の配列をもう一つ用意して、0に初期化しておいて
使ったものだけ、1としていく。
最後に、配列のうち,1となっているものの個数を数える
と言うものでしょうか。

また配列を0番から小さい順に使うときまっているのであれば
上の方がおっしゃれて言う通り、一つcounterを用意して、配列に代入するたびに
インクリメントしてく方法があります。

void counter(arr,counter,number){ arr[counter] = number; counter++ }

などと適当に関数化しておくと、あれかもしれませんね。

投稿2019/09/29 20:34

the_hoots_under

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/09/29 22:02

関数の仮引数をインクリメントしても、実引数には影響しません。 実際に動かして試してみると良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問