0

配列へのポインタのみを受け取る関数によって、配列のサイズを見つける方法は?


    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;
}
4

2 に答える 2

2

配列のサイズを渡さない限り、それはできません。あなたの場合、 -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;
}
于 2013-08-24T19:36:50.517 に答える
2

サイズ情報のないポインターを渡すだけの場合は、文字列イディオム findのようなものを使用し、特別なデータの終わりの値を持たなければなりません。の文字列イディオムは、データの終わりを示す 文字 ( ) を使用します。の標準的な文字列の長さ関数 ( ) も、この文字を文字列のサイズのカウントに含めません。上記のコードは、データの終わりをマークするために使用されているようです。これは、データに負の値を使用しない場合に機能します。この場合、次のように配列のサイズを計算できます。C char*Cnull\0Cstrlennull-1

size_t length_of_array(int *p) {
    size_t len = 0;
    while( *(p + len) > 0 )
        ++len;
    return len;
}
于 2013-08-24T19:53:56.557 に答える