参考 : 关于int *a[常量]与int (*a)[常量]的分析与区分(详解) - Angel_Kitty - 博客园
例1 int (*p)[4];
p是一个数组类型的指针,指向一个数组(该数组不定长)且该数组中的每个一维数组有4个int元素
图解:
其实说到底 int (*)[] 就是在描述一个长这样结构的数组指针数组,而中括号里面的整数描述的就是这些整数数组的大小。
举个例子
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int (*p)[4] = (int (*)[])malloc(sizeof(int) * 4 * 5); //开辟一片空间 数组指针数组的长度为5个,每个子数组的长度为4
memset(p, 0, sizeof(int) * 4 * 5); //空间清零
for (int i = 0; i < 5; i++) { //打印出来看看
for (int j = 0; j < 4; j++) {
printf("%3d ", p[i][j]);
}
printf("\n");
}
printf("---------------------------------------------------\n");
int q[5][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; //定义一个一样大的二维数组
memcpy(p, q, sizeof(q)); //把二维数组q里面的所有东西复制到p里面
for (int i = 0; i < 5; i++) { //打印出来看看
for (int j = 0; j < 4; j++) {
printf("%3d ", p[i][j]);
}
printf("\n");
}
return 0;
}
结果如下