这个比较复杂一点,我在源码里做了一点注释,应该可以看懂。 **仅给有需要的人以参考,如有错误请纠正我** #include<iostream> template<typename T> void make2dArray(T ** &x, int numberOfRows, int arr[], int n) //这里接收一个int数组arr[] 用来指定每行new多少列 { x = new T*[numberOfRows]; //n是arr[]的数组长度 for (int i = 0; i < n; i++) x[i] = new T[arr[i]]; //在x[i]行 new arr[i]个列 std::cout << "Complite" << std::endl; } template<typename T> void delete2dArray(T ** &x, int numberOfRows) //这个用来释放内存,只需要先把每一行delete掉 { for (int i = 0; i < numberOfRows; i++) //然后把存储行指针的x[]delete掉就释放完成了 delete[] x[i]; delete[]x; x = nullptr; //x指向nullptr防止误操作 std::cout << "Deleted" << std::endl; } int main() { double ** x; int numberOfRows = 5; int arr[5] = { 2, 3, 4, 5, 6 }; make2dArray(x, numberOfRows, arr, 5); delete2dArray(x, numberOfRows); return 0; }