C++ 为什么我们要使用双指针来引用堆上分配的2D数组?
因此,课程示例包含以下代码C++ 为什么我们要使用双指针来引用堆上分配的2D数组?,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,因此,课程示例包含以下代码 int **a; a = new int*[10]; for (int i = 0; i < 10; ++i){ a[i] = new int[5]; for (int j = 0; j < 5; ++j){ a[i][j] = i*10+5; } } int**a; a=新整数*[10]; 对于(int i=0;in int a[n] 但是,堆分配的数组合法吗?如中所示,a=新整数[n]
int **a;
a = new int*[10];
for (int i = 0; i < 10; ++i){
a[i] = new int[5];
for (int j = 0; j < 5; ++j){
a[i][j] = i*10+5;
}
}
int**a;
a=新整数*[10];
对于(int i=0;i<10;++i){
a[i]=新整数[5];
对于(int j=0;j<5;++j){
a[i][j]=i*10+5;
}
}
关于上述代码(以及堆上的多维数组),我有几个问题:
newint[5]()
进行零初始化a=new int[n]
在堆上工作,因为实际上有一个运行时调用来标记新内存,以便在数据a
指向时使用。它不能在堆栈上工作,因为编译器需要知道任何特定函数调用的堆栈帧有多大,因此该值必须在编译时可计算newint[5]()
进行零初始化a=new int[n]
在堆上工作,因为实际上有一个运行时调用来标记新内存,以便在数据a
指向时使用。它不能在堆栈上工作,因为编译器需要知道任何特定函数调用的堆栈帧有多大,因此该值必须在编译时可计算newint[5]()
进行零初始化a=new int[n]
在堆上工作,因为实际上有一个运行时调用来标记新内存,以便在数据a
指向时使用。它不能在堆栈上工作,因为编译器需要知道任何特定函数调用的堆栈帧有多大,因此该值必须在编译时可计算newint[5]()
进行零初始化a=new int[n]
在堆上工作,因为实际上有一个运行时调用来标记新内存,以便在数据a
指向时使用。它不能在堆栈上工作,因为编译器需要知道任何特定函数调用的堆栈帧有多大,因此该值必须在编译时可计算如果矩阵中的列数在编译时已知,则只需分配一个矩阵:
int nrow = 10; // number of rows assigned at run time
int (*a)[5]; // pointer to array of 5 ints
a = new int[nrow][5]; // allocate matrix
for (int i = 0; i < nrow; ++i) // initialize matrix
for (int j = 0; j < 5; ++j)
a[i][j] = i*nrow+j;
// ...
delete[] a;
int nrow=10;//运行时分配的行数
int(*a)[5];//指向5整数数组的指针
a=新整数[nrow][5];//分配矩阵
对于(int i=0;i
如果矩阵中的列数在编译时已知,则只需分配一个矩阵:
int nrow = 10; // number of rows assigned at run time
int (*a)[5]; // pointer to array of 5 ints
a = new int[nrow][5]; // allocate matrix
for (int i = 0; i < nrow; ++i) // initialize matrix
for (int j = 0; j < 5; ++j)
a[i][j] = i*nrow+j;
// ...
delete[] a;
int nrow=10;//运行时分配的行数
int(*a)[5];//指向5整数数组的指针
a=新整数[nrow][5];//分配矩阵
对于(int i=0;i
如果矩阵中的列数在编译时已知,则只需分配一个矩阵:
int nrow = 10; // number of rows assigned at run time
int (*a)[5]; // pointer to array of 5 ints
a = new int[nrow][5]; // allocate matrix
for (int i = 0; i < nrow; ++i) // initialize matrix
for (int j = 0; j < 5; ++j)
a[i][j] = i*nrow+j;
// ...
delete[] a;
int nrow=10;//运行时分配的行数
int(*a)[5];//指向5整数数组的指针
a=新整数[nrow][5];//分配矩阵
对于(int i=0;i