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]

谢谢。

4

2 回答 2

3

第一个arr是指向 int 的指针数组。所以你arr是一个变量。那是声明行。

第二个:假设它arr是一个数组(它已经被声明了!),获取它的值arr[2]并对其进行pointer to int类型转换。

于 2013-06-22T18:19:22.817 回答
2

在您的上下文中替换int *arr[2]with的问题(int *) arr[2]是后者不再符合声明的 C 语法。根据 C 文法的结构,在int *arr[2]*是附于arr,而不是intint通过使用 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]。后者不是声明。

于 2013-06-22T18:32:29.810 回答