括号是干什么用的?
在 C 括号中 [] 的优先级高于星号 *
来自维基百科的很好的解释:
要将变量声明为指向数组的指针,我们必须使用括号。这是因为在 C 括号中 ([]) 的优先级高于星号 (*)。因此,如果我们希望声明一个指向数组的指针,我们需要提供括号来覆盖它:
double (*elephant)[20];
这声明了大象是一个指针,它指向的类型是一个包含 20 个双精度值的数组。
要声明指向指针数组的指针,只需组合符号即可。
int *(*crocodile)[15];
来源。
而你的实际情况:
int (*data[2])[5];
data 是一个包含 2 个元素的数组。每个元素都包含一个指向 5 个整数数组的指针。
所以你可以在代码中使用你的“数据”类型:
int (*data[2])[5];
int x1[5];
data[0] = &x1;
data[1] = &x1;
data[2] = &x1;//<--- out of bounds, crash data has no 3rd element
int y1[10];
data[0] = &y1;//<--- compiling error, each element of data must point to an int[5] not an int[10]