我并不真正理解C中的一些基本内容,比如动态分配数组数组.我知道你可以这样做:
int **m;
为了声明一个二维数组(随后将使用一些*alloc函数分配).也可以通过这样做"轻松"访问它*(*(m + line) + column)
.但是我应该如何为该数组中的元素赋值?使用gcc时,以下语句m[line][column] = 12;
因分段错误而失败.
任何文章/文档将不胜感激.:-)
该m[line][column] = 12
语法是确定(提供line
和column
在范围内).
但是,您没有编写用于分配它的代码,因此很难确定它是错还是正确.它应该是符合的
m = (int**)malloc(nlines * sizeof(int*)); for(i = 0; i < nlines; i++) m[i] = (int*)malloc(ncolumns * sizeof(int));
一些旁注:
这样,您可以为每条线分配不同的长度(例如,三角形阵列)
稍后您可以在使用数组时realloc()或free()单个行
当你释放()整个数组时,你必须释放()每一行
您的语法m [line] [colummn]是正确的.但是为了在C中使用2D数组,必须为它分配内存.例如,此代码将为给定行和列的表分配内存.
int** AllocateArray(int line, int column) { int** pArray = (int**)malloc(line*sizeof(int*)); for ( int i = 0; i < line; i++ ) { pArray[i] = (int*)malloc(column*sizeof(int)); } return pArray; }
注意,为了简洁起见,我省略了malloc的错误检查.真正的解决方案应该包括它们.