(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]
感谢。
答案 0 :(得分:3)
第一个将arr
作为指向int的指针数组。所以你的arr
是一个变量。这是一条宣言。
第二个:假设arr
是一个数组(已经声明了!),取值为arr[2]
并在其上投射pointer to int
类型。
答案 1 :(得分:2)
在您的上下文中用int *arr[2]
替换(int *) arr[2]
的问题是后者不再符合声明的C语法。根据C语法的结构,在int *arr[2]
中,*
附加到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]
或(int) *arr[2]
。后者不是声明。