这个演员是什么意思? (int(*)[10])

时间:2015-06-19 08:37:14

标签: c casting

我偶然发现了下面的演员:

(int (*)[10])

在我看来,这是一个“指向int的指针”。 我们假设以下数组声明:

int array[10];

然后我会假设 &array的类型为(int (*)[10])

这是对的吗?

4 个答案:

答案 0 :(得分:6)

它是指向大小为10的整数数组的指针,而不是指向int'指针的'指针。

例如,当您传递类型

 char arr[20][10]

到一个函数,它衰变为键入char(*)[10]

由于编译器必须知道没有列来有效地将2d数组转换为内存中的线性分配,因此它与int **类型不同。

答案 1 :(得分:4)

  

在我看来,这是一个指向int"的指针。

没有。它的指针指向10 int s 的数组。

  

然后我假设&array的类型为(int (*)[10])

是。你的假设是正确的。 &array是数组array的地址,类型为int (*)[10]

答案 2 :(得分:2)

这是一个与您的观察结果一致的教育示例(编译时没有警告):

int array[10]; /* an array of 10 ints */
int (*ptr)[10] = &array; /* a pointer to an array of 10 ints */

/* a function which receives a pointer to an array of 10 ints as param */
int myfunc (int (*param)[10])
{
    return 10;
}

int main(void)
{
    /* a pointer to a function that accepts a pointer to an array of 10 ints as parameter and returns an int */
    int (*func)(int (*)[10]);

    func = myfunc; /* no cast needed. The objects are of the same type */
    /* func = (int (*)(int (*)[10])) myfunc; */ /* with cast */

    (*func)(ptr);  /* function pointer called with ptr parameter */
    return 0;
}

答案 3 :(得分:0)

它是一个指向10个整数数组的指针。