(int *)arr [2]和int * arr [2]有什么区别?

时间:2013-06-22 18:16:55

标签: c

(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]

感谢。

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]。后者不是声明。