質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

882閲覧

配列の要素数を調べる sizeof演算子?

madanai

総合スコア5

C

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/08/14 07:29

配列の要素数を調べるとき、
例えばint data[10][30]という二次元配列があったとして、実際に値が代入されている1次元目の数を調べることはできますか?

sizeof ( data ) / sizeof ( data [ 0 ] );
とsizeof演算子を使うと最大要素数である10が返ってきますが、
実際に値の代入されている要素数だけを数えたいです。

宜しくお願い致します。

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

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

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

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

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

guest

回答3

0

実際に値の代入されている要素数だけを数えたいです。

それはできません。
実際に値の存在しない要素というのは存在しないからです。
変数というのはメモリ上のエリアに対して名前を付けたものです。
メモリは物理的に存在するので、たとえデータを代入していようといまいと常に値は存在しています。

もしやるとしたら、ある特定の値は絶対に入力しないと決めて、その値で埋めておき、
その値以外の数を数える。
もしくは、特定の値を最後に入れておき、それが出てくるまでの数を数える(文字列と同じ方式)
等の方法を用いて自分でルールを作って数えないといけません。

データを入力するときにいくつ入れたかを数えておいて、それを記録しておくというのも一つの手です。

投稿2020/08/14 07:34

編集2020/08/14 07:37
amiya

総合スコア1218

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

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

madanai

2020/08/14 07:51

とても分かりやすいご説明ありがとうございます。 for文で最大要素数までループさせ、無事カウントすることができました。
guest

0

ベストアンサー

値の代入されている

特定できる値ならループして数えましょう。・・・cにはそういった機能は有りません。

投稿2020/08/14 07:32

cateye

総合スコア6851

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

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

cateye

2020/08/14 07:34

〉sizeof ( data ) / sizeof ( data [ 0 ] );・・・にしても、それが定義されている“スコープの範囲内”です。
madanai

2020/08/14 07:36

回答ありがとうございます。 Javaならあるみたいですね。 今回の質問の場合だと整数型なのでカウントできますが、 文字列の場合も同じようにできますか?
cateye

2020/08/14 07:42 編集

文字列は、strlen()で終端の'\0'までを数えます。 ・・・逆に言えば、(文字列の範囲外であっても)終端文字が現れるまでメモリを検索します。
madanai

2020/08/14 07:49

分かりやすいご説明ありがとうございます! 無事カウントできました。 大変助かりました。
guest

0

それは実際に値が格納されてる個数をカウントするしか無いです。

投稿2020/08/14 07:30

y_waiwai

総合スコア87774

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

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

madanai

2020/08/14 07:33

回答ありがとうございます。 申し訳ないのですが、そのやり方が分かりません。 for文で最大要素数までループして、値の個数をカウントする、で合っていますか?
y_waiwai

2020/08/14 07:36

配列の中の値で代入済/非代入が判別できるなら、おっしゃるように配列をチェックして個数を数えるという話になります。 が、そういう場合ばかりでもないので、値の格納時に、その位置を覚えておく、と言う方法を取りますね
madanai

2020/08/14 07:47

ループさせ数えることに成功しました! 今回もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問