配列へのポインタのみを受け取る関数によって、配列のサイズを見つける方法は?
int find(int *p)
{
// I want to find the sizeof
// the array in this function
return 1;
}
int main()
{
int a[]={12,2,9,6,5,11,15};
find(a);
return 0;
}
配列のサイズを渡さない限り、それはできません。あなたの場合、 -1 がリストの最後をマークするセンチネルである場合、これを使用できます:
#include <stdio.h>
int find(int *p)
{
int * q = p;
while(*q != -1)
++q;
return q-p;
}
int main()
{
int a[]={12,2,9,6,5,11,-1};
printf("%d", find(a));
return 0;
}
サイズ情報のないポインターを渡すだけの場合は、文字列イディオム find
のようなものを使用し、特別なデータの終わりの値を持たなければなりません。の文字列イディオムは、データの終わりを示す 文字 ( ) を使用します。の標準的な文字列の長さ関数 ( ) も、この文字を文字列のサイズのカウントに含めません。上記のコードは、データの終わりをマークするために使用されているようです。これは、データに負の値を使用しない場合に機能します。この場合、次のように配列のサイズを計算できます。C
char*
C
null
\0
C
strlen
null
-1
size_t length_of_array(int *p) {
size_t len = 0;
while( *(p + len) > 0 )
++len;
return len;
}