2009-10-07 4 views
27

質問された質問のいずれにも答えが見つかりませんでした。 私は整数配列を関数に渡しています。今は配列をたどりたいのですが、配列の要素数を指定したarrayname.lengthを使って、C、C++で簡単に処理できました。それを見つける方法は何ですか? [NSArrayObject length]はNSArray型で動作しますが、int []に対して使用します。 でも[XYZ count]は機能しません。それを見つけるために別の方法が必要です。目的のCでの配列の長さ

答えて

20

intの配列を持つObjective-C固有のものはありません。

sz = (sizeof foo)/(sizeof foo[0]); 
+0

私はこれを試しました... 2次元配列のdisを見ましたが、配列は1次元です...ちょうどint foo []のように私はsizeof(foo)/ sizeof(foo [0])を返します。/4 ie 1 ..私はすでにそれを試しました...しかし運はありません。他に何かありますか? ありがとう – Darpan

+2

@Darpan:これは、int foo []ではなく、int foo [5]を宣言したときにのみ機能します。 – mouviciel

+0

に同意すると、これはあなたが望むものを得ることができません。 – pxl

5

hh? Cでは、 "arrayname.length"のようなものはありません。 int[]などのプリミティブ型の配列には、実行時に関連付けられた長さ情報がありません。それは静的にint foo[5]のように定義されていた場合

17

array.lengthのようなものは、Objective-Cの中C.アンint型の配列ではありませんが、Cのint配列としてまったく同じである、あなたはサイズを取得するためにsizeof(foo)を行うことができます - しかし、同じ関数内でのみfooが定義されています(他の関数では、それは単なる配列ではなくintポインタです)。そうでなければ、この情報を得る固有の方法はありません。サイズを渡すか、センチネル値を使用するか(文字列のC文字列の終端 '\ 0'のように)必要があります。

+0

の長さを取得するには、[XYZ数]を使用することができます整数配列の要素。 sizeof.as wen id sizeofは単にsizeof intを返します – Darpan

+4

私が言ったように、それはできません。 'sizeof()'は、上で与えた例のような静的な大きさの配列に対しては、それらが定義されているのと同じ関数で動作します。 – Chuck

5

アレイは、基本的に、アレイに割り当てられているメモリブロックの先頭までの単なるメモリアドレスです。実際にそれを使用するには、作成後に何らかの形で長さを覚えておく必要があります。長さを関数に渡すか、配列と長さを別の構造体にラップし、その構造体を渡します。

1

NSMutableArrayの求職のようです。なぜあなたはC配列で作業する必要があるのですか?そうでない場合は、NSMutableArrayと考えてください。

私は間違っている可能性があります(私は私がいる場合は私を修正してください)が、Cで実行時にint []のサイズを得るのは簡単な方法はありません。あなたはあなたの配列を保持するための構造体を作成し、あなた自身が配列の中のいくつの項目を追跡することができるintを作成する必要があります。

あなたの構造体が配列とブロックを保持できるようにすることもできます。ブロックを設計して追跡を行うことができます。

でもこれはCの質問ではなく、客観的な質問です。

2

arrayname.lengthのようなものがでありません:あなたは試みることができるMacのメソッド(malloc_size)があるものの、実際にCでよくサポートされていない何をする尋ねている

C.なぜなら、非常に多くの関数が引数のペアをとり、1つの引数は配列に、1つの引数には配列の長さをとります。これに対する最も明白なケースはmain関数です。あなたは、この関数はmain.mという名前のファイル内のすべてのあなたのiPhoneのプロジェクトである、それは次のようになります見つけることができます。

int main(int argc, char *argv[]) {  
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

argv agumentがVエクター、または文字列の配列、およびargcがどのように注意してください引数はcです。この配列に含まれているアイテムの数。

すべてのプリミティブタイプについて同じことをする必要があります。これはObjective-CのCの部分です。 のObjectiveのNSArrayまたはサブクラスを使用している部分は、正常に動作しますが、すべての要素がオブジェクトである必要があります。

3

このコードは、配列内の要素の総数がわからない場合に使用できます。

main() 
{ 
    int a[]={1,2,3,4,5,6,7} 
    int i; 
    clrscr(); 
    for (i=0;i<=((sizeof(a)/sizeof(int));i++) 
    { 
     puts(a[i]); 
    } 
    getch(); 
} 
+2

1行のテキストがコードフォーマットを使用するように指示する前に4桁のスペースが必要です。多くの行のコードの前に4つのスペースをすばやく入れるには、すべての行を選択して** {} **ボタンをクリックします。私はそれを読めるようにあなたのために修正しました。 –

2

[配列数]これはObjective-Cで最も簡単な仕事に見える

28

あなたは、私がの長さ、すなわち番号を探しています配列

+1

質問はカウントセレクタがないC配列についてです。 – Vive