2011-12-11 14 views
5

配列を指すポインタのみがわかっているときに配列の長さを取得する方法はありますか? ( - すみません、私は本当のCを "話す" はありません。これは、Arduinoのコードからsnippletです)ポインタを使用して配列の長さを取得

int testInt[3]; 
testInt[0] = 0; 
testInt[1] = 1; 
testInt[2] = 1; 

int* point; 
point = testInt; 

Serial.println(sizeof(testInt)/sizeof(int)); // returns 3 
Serial.println(sizeof(point)/sizeof(int)); // returns 1 

次の例を参照してください。

答えて

11

簡単な答えはいいえ、できません。おそらく、配列内の項目の量を格納する変数をメモリに保持したいと思うでしょう。

それほど簡単な答えはありません。配列の長さを決定する方法はありますが、配列の末尾に-1などの別の要素を付ける必要があります。それをループしてこの要素を見つけてください。この要素の位置が長さです。ただし、これはあなたの現在のコードでは機能しません。

上記のいずれかを選択します。

+3

+1これはCが吸うものの1つです。 :) –

+1

@WTP C++の場合と同じですが、 'std :: vector'がそれを処理します。 –

1

あなたがすることはできません、あなたは配列変数を持っている場合、C++を使用ベクトルクラス

3
  • にあなたは、配列の長さを推測することができた場合、ポインタ演算

    を使用して、配列の長さを推測試みるべきではありません。

  • 配列の長さを推測することはできません。
1

あなたは配列全体を指すなど最初の要素を指すことができない場合:

int testInt[3]; 
int (*point)[3]; 
point = testInt; 

printf("number elements: %lu", (unsigned long)(sizeof*point/sizeof**point)); 
printf("whole array size: %lu", (unsigned long)(sizeof*point)); 
+0

この場合を除いて、あなたはすでに長さを知っていなければなりません。 –

4

また、ここでArduinoのプロジェクトをやって...インターネット上の 誰もが、それは不可能だと主張しているようですこれを行うには...本の中 、まだ最古のトリックがnullでうまく動作するようですchar型のポインタのための配列...

例を終了:

int getSize(char* ch){ 
     int tmp=0; 
     while (*ch) { 
     *ch++; 
     tmp++; 
     }return tmp;} 

魔法...

+1

char配列の場合は、上記と同じメソッドを使用するので、strlen()を使用してそのサイズを簡単に取得できます。 しかし、数値のchar配列の場合、単純にできません。 –

関連する問題