(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
是一个变量。那是声明行。
第二个:假设它arr
是一个数组(它已经被声明了!),获取它的值arr[2]
并对其进行pointer to int
类型转换。
在您的上下文中替换int *arr[2]
with的问题(int *) arr[2]
是后者不再符合声明的 C 语法。根据 C 文法的结构,在int *arr[2]
中*
是附于arr
,而不是int
。int
通过使用 extra 来强制它()
违反了声明的后缀。
()
只要不违反 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]
。后者不是声明。