int **a = new int* [m] //分配一个指针数组,将其首地址保存在a中 、
for(int i = 0; i < m; i++) //为指针数组的每个元素分配一个数组
a[i] = new int [n];
相当于产生了一个二维数组 a[m][n]了
静态声明的数组可以有公式(假设也是m行n列)
b[i][j] = b[i*n +j]
这是因为数组b是连续的一片内存,而动态声明的数组任意的a[k]都是一个int*类型,即一个地址,所以只能a[i][j]或者*(*(a+i) + j)来访问数组的元素,而不能a[i*n + j]使用。
动态声明的数组,使用后需要释放内存。
for(int i = 0; i < m; ++i)
delete []a[i];
delete []a;
1 #include <iostream> 2 #include <stdlib.h> 3 4 using namespace std; 5 6 7 int main() 8 { 9 int row,column; 10 cin >> row >> column; 11 //申请空间 12 int **a = new int* [row]; 13 for(int i = 0; i < row; i++) 14 a[i] = new int[column]; 15 16 //使用空间 17 for(int j = 0; j < row; j++) 18 for(int k = 0; k < column; k++) 19 a[j][k] = rand() % 100; 20 21 for(int j = 0; j < row; j++) 22 { 23 cout << endl; 24 for(int k = 0; k < column; k++) 25 cout << a[j][k] << " "; 26 } 27 //释放空间 28 for(int i = 0; i < row; i++) 29 delete []a[i]; 30 a = NULL; 31 32 return 0; 33 }
1 //方法二,利用vector创建二维数组 2 #include <iostream> 3 #include <stdlib.h> 4 5 using namespace std; 6 7 8 { 9 int row,column; 10 cin>>row>>column; 11 13 //申请空间 14 vector<vector<int> > a(row,vector<int>(column)); 15 16 17 //使用空间 18 for(int j = 0;j < row;j++) 19 for(int k = 0;k< column;k++) 20 a[j][k] = rand()%100; 21 22 for(int j = 0;j < row;j++) 23 { 24 cout<<endl; 25 for(int k = 0;k< column;k++) 26 { 27 a[j][k] = rand()%100; 28 cout<<a[j][k]<<" "; 29 } 30 } 31 return 0; 32 }
时间: 2024-10-09 11:17:58