(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]
ありがとう。
(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]
ありがとう。
最初のものはarrint へのポインターの配列として作成します。だからあなたarrは変数です。それが宣言行です。
2 つ目:arrそれが配列 (すでに宣言されている!) であると仮定して、その値を取り、それに型arr[2]をキャストpointer to intします。
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]。後者は宣言ではありません。