0

2D配列(文字列の配列)をCの関数に渡そうとしていますが、「互換性のないポインター型」の警告が表示されます。

In function ‘main’:
warning: passing argument 1 of ‘addCodonstoHash’ from incompatible pointer type

コードは以下のとおりです。キーとして3文字の文字列(DNAコドンを表す)と、コドンが変換されるアミノ酸を表す関連するchar値を持つuthashを使用してハッシュテーブルを作成しようとしています。したがって、本質的には、以下のコードから、次の形式のハッシュテーブルが必要になります。

{"GCT":'A'、 "GCC":'A'、 "GCA":'A'、 "GCG":'A'、 "GCN":'A'}

ここで、「A」はアラニンを表します。しかし、現在、コドンの配列を、それらを解析してハッシュテーブルに追加する必要がある関数に渡すだけで問題が発生しています。互換性のないポインター型 を 読み 、文字列の配列をパラメーターとしてCの関数に渡す ことは役に立ちません...配列がどのようにポインターに割り当てられ、劣化するかは理解できたと思いましたが、明らかにそうではありませんでした。

さらに、addCodonstoHashで配列の長さを計算しようとすると(さまざまなアミノ酸を表すさまざまなサイズの配列が多数存在することになります)、printfデバッグ行からそれぞれ8と2が返され、次のことができます。なぜそうなのか理解してください。皆さんは私を正しい方向に導くことができますか?

/* Helper method for adding codons to hash table from initialized arrays */
void addCodonstoHash(char AAarray[][4], char AAname)
{   int i, size1, size;
    size1 = sizeof(AAarray);
    size  = size1 / sizeof(AAarray[0]);

    /* Debugging lines */
    printf("%d\n", size1);
    printf("%d\n\n",size);

    for (i = 0; i < (sizeof(AAarray) / sizeof(AAarray[0])); i++)
    {   add_codon(AAarray[i], AAname);
        printf(AAarray[i]);
        printf("\n");
    }
}


int main(int argc, char *argv[])
{   /*
     * Generate arrays for codons corresponding to each amino acid, will
     * all eventually be incorporated into hash table as keys, with AA
     * values.
     */
    const char Ala[][4] = {"GCT", "GCC", "GCA", "GCG", "GCN"};
    ...


    addCodonstoHash(Ala, 'A');

    delete_all(); 
    return 0;
}

ありがとう!

4

1 に答える 1

1

Alaタイプは(またはオペランドconst char(*)[4]として使用される場合を除く)ですが、パラメーターのタイプはです。これをとして宣言する必要があります。sizeof&char(*)[4]const

于 2012-09-03T12:00:48.597 に答える