2012-01-07 8 views
2

目的Cの基本浮動小数点配列をNULL終了する必要がありますか?目的のCの浮動小数点配列

私は基本的なfloat配列があります。

float data[] = {0.5, 0.1, 1}; 

を、私ははsizeof(データ)を行うとき、私は "12" を取得します。

+0

どのような文脈で使用しますか?この配列に供給される関数がヌル終了する必要がある場合は、yesにします。それが必要でなければ、あなたはする必要はありません。 –

+0

こんにちは、私はそれを定期的なループでループするので、私はそれらの点をグラフにプロットします。宣言でnullを終了する必要がありますか? – Ayrad

答えて

8

1つを作成する場合は、nullを終了する必要はありません。そして一般にfloat[]を取るメソッドは、いくつの要素があるかを示すためにsizeパラメータを取るでしょう。

floatがアーキテクチャ上で4バイトであり、そのうち3つがあるため、sizeof(data) = 12が得られます。

+0

私はforループを設定するために12の代わりに3を得るために、要素数を得るために別の関数を使う必要がありますか? for(int i = 1; i Ayrad

+0

'count = sizeof(data)/ sizeof(float)'です。また、http://en.wikipediaも参照してください。org/wiki/Sizeof#Using_sizeof_with_arrays – mattjgalloway

+2

@Ayrad - C配列の要素数を取得する標準的で信頼できる方法はありません。宣言されたサイズの配列に対して 'sizeof(array)/ sizeof(element)'を実行できますが、動的に割り当てられた配列やパラメータとして渡された配列に対しては機能しません。 (配列に宣言されたサイズがある場合は、最初に計算を行うことに意味がありません。宣言されたサイズを使用してください)。 –

2

sizeofパラメータが占有するメモリ量(バイト単位)を返します。あなたの場合、すべてfloatは4バイトを占め、したがって4 * 3 = 12です。

ホットリックスは、mattjgallowayの答えのコメントによると、C配列の要素の数を取得する標準的な方法はありません。

size = sizeof(data)/sizeof(float)を使用しますが、パラメータとして配列を渡すと機能しないので、この方法を使用する際は注意が必要です。
一般的なアプローチは、変数にサイズを格納し、それをforループの上限として使用することです(多くの場合、配列には配列のサイズを取得するための追加パラメータが必要です)。

ヌル終端された配列を使用すると、配列全体を繰り返し処理でき、i -esim要素がヌルの場合(つまり、strcmpのようなメソッドのアプローチ)、停止することができます。

1

タイプfloatの値は決してnullになることはありません。そのため、nullのあるタイプfloatの配列を終了することはできません。あるプリミティブ型の変数には常に数値があり、さまざまなNULL定数(Objective-C nilNil、NULL、および'\0')のリテラル値は0です。これは明らかにa float。あなたは警告なしに次の行をコンパイルすることができても、そう

float x = NULL; 

...それは同じ。このような結果だろう:配列内のNULL定数を挿入

float x = 0; 

floatのタイプは、0.0またはその他の一定のゼロ値を挿入することと区別できません。

関連する問題