我偶然发现了下面的演员:
(int (*)[10])
在我看来,这是一个“指向int的指针”。 我们假设以下数组声明:
int array[10];
然后我会假设
&array
的类型为(int (*)[10])
这是对的吗?
答案 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个整数数组的指针。