/****************************************************************************************************
数组和指针参数是如何被编译器修改的.
"数组名被改写成一个指针参数"规则并不是递归定义的.数组的数组会被改写为"数组的指针",而不是"指针的指针"
****************************************************************************************************
实 参 所匹配的形式参数
数组的数组 char c[8][10]; char(*)[10]; 数组指针
指针数组 char *c[15]; char **c; 指针的指针
数组指针(行指针) char (*c)[64]; char (*c)[64]; 不改变
指针的指针 char **c; char **c; 不改变
正如上所述, 因此在main()中的参数才能看到 **argv这样的参数,因为*argv[]是指针数组,在编译时会被编译器改写
成一个指向指针的指针.如果argv是一个数组的数组即(char argv[10][15])它将被编译器改写成char (*argv[15]),
而不是 char **argv .
Array=(int **)malloc(nrows*sizeof(int *));//??
Array本质上也是一个指针,只不过它指向指针,是“指针的指针”。
这里给他分配空间,使他可以保存nrows个元素,每个元素都是一个指针int*
这样分配了之后,Array[0]到Array[nrows-1]这里面就保存了nrows个指针,只不过都是野指针,接下来就要让这些野指针变成指向合法地址的指针。
for(i=0;i<nrows;i++)
Array[i]=(int *)malloc(ncolumns*sizeof(int));//??
依次给Array[0]到Array[nrows-1]这nrows个指针分配空间,每一个都可以保存ncolumns个整数。