2

(int*) arr[2] は型キャストと関係がありますか? はいの場合、どこで使用されますか?

この問題は、次のコードをコンパイルしようとしたときに発生しました:

    int* arr[2];
    int arr1[] = { 1,2};
    int arr2[] = { 1,6};
    arr[0] = arr1;
    arr[1] = arr2;

交換することで

int* arr[2] with (int*)arr[2]

ありがとう。

4

2 に答える 2

3

最初のものはarrint へのポインターの配列として作成します。だからあなたarrは変数です。それが宣言行です。

2 つ目:arrそれが配列 (すでに宣言されている!) であると仮定して、その値を取り、それに型arr[2]をキャストpointer to intします。

于 2013-06-22T18:19:22.817 に答える
2

int *arr[2]コンテキストでwithを置き換える際の問題(int *) arr[2]は、後者が宣言の C 文法に準拠しなくなったことです。C 文法の構造によると、 inint *arr[2]はではなく に*付けられます。extra を使用してそれを強制することは、宣言のサフィックスに違反します。arrintint()

()C 文法によって課される宣言の構文構造に違反しない限り、C 宣言で使用することができます。たとえば、次のことができます。

int *(arr)[2]; // same as `int *arr[2]`

また

int *(arr[2]); // same as `int *arr[2]`

また

int (*arr)[2]; // different from `int *arr[2]`, but still valid

しかし、あなたの(int *) arr[2]orではありません(int) *arr[2]。後者は宣言ではありません。

于 2013-06-22T18:32:29.810 に答える