(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]
ありがとう。
最初のものはarr
int へのポインターの配列として作成します。だからあなたarr
は変数です。それが宣言行です。
2 つ目:arr
それが配列 (すでに宣言されている!) であると仮定して、その値を取り、それに型arr[2]
をキャストpointer to int
します。
int *arr[2]
コンテキストでwithを置き換える際の問題(int *) arr[2]
は、後者が宣言の C 文法に準拠しなくなったことです。C 文法の構造によると、 inint *arr[2]
はではなく に*
付けられます。extra を使用してそれを強制することは、宣言のサフィックスに違反します。arr
int
int
()
()
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]
。後者は宣言ではありません。