晋城做推广的网站排行,代理招商平台,wordpress设置文章字体 插件,上海外贸大厦矩力集成2008年校园招聘笔试题#xff1a;动态申请一个二维数组存储图像阵列 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的 列。 以下为一个二维的例子: //typedef int (*arraypoiter)[ncolumns]; int **dynamic_alloc_arrays(unsigned int nro…矩力集成2008年校园招聘笔试题动态申请一个二维数组存储图像阵列 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的 列。 以下为一个二维的例子: //typedef int (*arraypoiter)[ncolumns]; int **dynamic_alloc_arrays(unsigned int nrows,unsigned int ncolumns) { unsigned int i; int **array (int **)malloc(nrows * sizeof(int *)); for(i 0; i nrows; i) array[i] (int *)malloc(ncolumns * sizeof(int)); printf(array0x%x/n,(int)array); for(i0;inrows;i) { printf(array[%d]0x%x/n,i,(int)array[i]); } printf(/n); return array; } void main(void) { int **test_allocate; unsigned int nrows3; unsigned int ncolumns4; test_allocate dynamic_alloc_arrays(nrows,ncolumns); printf(test_allocate%x/n,test_allocate); } /* array911c70 array[0]911c30 array[1]911bf0 array[2]911bb0 test_allocate911c70 */ 当然, 在真实代码中, 所有的 malloc 返回值都必须检查。你也可以使用 sizeof(*array) 和sizeof(**array) 代替 sizeof(int *) 和 sizeof(int)因为*array的类型为int ***array的类型为int。 你可以让数组的内存连续, 但在后来重新分配列的时候会比较困难, 得使用一点指针算术: int **dynamic_alloc_arrays(unsigned int nrows,unsigned int ncolumns) { unsigned int i; int **array (int **)malloc(nrows * sizeof(int *)); array[0] (int *)malloc(nrows * ncolumns * sizeof(int)); for(i 1; i nrows; i) array[i] array[0] i * ncolumns; printf(array0x%x/n,(int)array); for(i0;inrows;i) { printf(array[%d]0x%x/n,i,(int)array[i]); } printf(/n); return array; } void main(void) { int **test_allocate; unsigned int nrows3; unsigned int ncolumns4; test_allocate dynamic_alloc_arrays(nrows,ncolumns); printf(test_allocate%x/n,test_allocate); } /* array911c70 array[0]911c10 array[1]911c20 array[2]911c30 test_allocate911c70 */ 在两种情况下, 动态数组的成员都可以用正常的数组下标 arrayx[i][j] 来访问 (for 0 i nrows 和 0 j ncolumns)。 另一种选择是使用数组指针: int (*array4)[NCOLUMNS] malloc(nrows * sizeof(*array4)); 但是这个语法变得可怕而且运行时最多只能确定一维。因为NCOLUMNS必须为定值 ×××××××××××××××××××××××××××××××××××××× 语言里数组名是被看作指针来使用的一维数组是指针二维数组是指向指针的指针三维是......... 真的是这样的吗看下面的例子 void show (int * * info, int x, int y) //打印一个x*y的数组的内容 { int i, j; for (i0;ix;i) { for (j0;jy;j) { printf (%d ,info[i][j]); } printf (/n); } } void Function (void) { int as[10][10]; show (as,10,10); // error C2664: show : cannot convert parameter 1 from int [10][10] to int ** Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast } 在C中没有安全类型检查上述程序只是warning但是程序运行会崩溃 在C中根本就无法编译通过即as[10][10]和int * *根本不是一个类型 为什么在c中二维数组虽然是定义为指向指针的指针但是实际上被指向的指针是不存在的即没有一个内存来存储这个指针只是在执行as [n]时返回一个指针罢了as所指的不过是存放数组内容的地址 实际上从上面**P和动态二维数组的使用即可看出来**P和静态二维数组的本质区别转载于:https://www.cnblogs.com/xmphoenix/archive/2011/11/21/2257709.html