几天前,我学会了如何从互联网创建2D分配的内存阵列,它完美无缺.要访问数组,我们只需使用matrix [i] [j],但是有没有什么方法可以通过使用*符号而不是[]来取消引用这个2D数组用于输入以及其他方法?
第一个问题解决了我可以使用*(*(矩阵i)j)
现在我又得到了另一个问题,最后的代码段是释放分配的内存(我也是从互联网上获得的),但我不明白,为什么我只能使用delete []矩阵?
int **matrix; // dynamically allocate an array matrix = new int *[row]; for (int count = 0; count < row; count++) { matrix[count] = new int[col]; } // input element for matrix cout << endl << "Now enter the element for the matrix..."; for (int i=0; i < row; i++) { for (int j=0; j < col; j++) { cout << endl << "Row " << (i+1) << " Col " << (j+1) << " :"; cin >> matrix[i][j]; // is there any equivalent declaration here? } } // free dynamically allocated memory for( int i = 0 ; i < *row ; i++ ) { delete [] matrix[i] ; } delete [] matrix ;
解决方法
由于[b]只是*(a b),你当然可以这样做:
*(*(matrix + i) + j)
无论如何,这些新的分配容易出错.如果其中一个嵌套的新闻抛出,那么你就会有泄漏.尝试使用std :: vector代替.