
c++问题,定义的函数void f(int m,int n)里面,有int *p=new int[m][n];然后编译通不过。
请问这什么原因,我把它改成int*p=newint[m*n];可以通过,但我要的是一个二维数组啊...
请问这什么原因,我把它改成int *p=new int[m*n];可以通过,但我要的是一个二维数组啊
展开
4个回答
展开全部
C++的动态数组能“动”的只有其中一维,如果你非要new出个动态二维来,有三种方案:
1、固定第二维:
int(*p)[20]=new int[m][20];
用完后delete[] p;
2、分步分配:
int**p=new int*[m];
for(int i=0;i<m;i++)
p[i]=new int[n];
用完后
for(int i=0;i<m;i++) delete[] p[i];
delete[] p;
3、标准模板库:
#include<vector>
using std::vector;
vector< vector<int> > p;
p.resize(m);
for(int i=0; i<m; i++) p[i].resize(n);
用完后自动释放
三种方式都可以用p[i][j]来访问数组元素。
1、固定第二维:
int(*p)[20]=new int[m][20];
用完后delete[] p;
2、分步分配:
int**p=new int*[m];
for(int i=0;i<m;i++)
p[i]=new int[n];
用完后
for(int i=0;i<m;i++) delete[] p[i];
delete[] p;
3、标准模板库:
#include<vector>
using std::vector;
vector< vector<int> > p;
p.resize(m);
for(int i=0; i<m; i++) p[i].resize(n);
用完后自动释放
三种方式都可以用p[i][j]来访问数组元素。
展开全部
int *p=new int[m][n];这句的意思是你给一维指针分配了一个二维空间,肯定是不行的;
而int *p=new int[m*n];这句的意思是给一维指针赋予一个一维空间,当然可以;
你要二维数组的话,应该是int **p=new int[m][n] ;
如果你是要一个指向二维数组的指针的话,也可以 这样:
int *p;
int [][] a=new int[m][n];
p=&a[0][0];
而int *p=new int[m*n];这句的意思是给一维指针赋予一个一维空间,当然可以;
你要二维数组的话,应该是int **p=new int[m][n] ;
如果你是要一个指向二维数组的指针的话,也可以 这样:
int *p;
int [][] a=new int[m][n];
p=&a[0][0];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(^o^)/~
你int *p=new int[m][n]这么new一个二维数组坑定不行撒,,,
你int *p=new int[m*n]这么new的是一个一维数组肯定行撒,,,
二维数组你可以这么干 int **p = new int*[m]
然后再用个for循环:
for(int i=0;i <m;i++)
{
*p[i]=new int[n];
}
要么也可以这么干:
char (*p)[10] = new int[M][N]; //二维mn必须是常量
懂?反正不能像你那么干,也不能像楼上那么干会出乱子滴
你int *p=new int[m][n]这么new一个二维数组坑定不行撒,,,
你int *p=new int[m*n]这么new的是一个一维数组肯定行撒,,,
二维数组你可以这么干 int **p = new int*[m]
然后再用个for循环:
for(int i=0;i <m;i++)
{
*p[i]=new int[n];
}
要么也可以这么干:
char (*p)[10] = new int[M][N]; //二维mn必须是常量
懂?反正不能像你那么干,也不能像楼上那么干会出乱子滴
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要使用指向指针的指针,也就是说如果要用指针的话,需要是这个形式:
int **p=new int[m][n];
PS: LZ不给分,评个最佳也行,谢谢!
int **p=new int[m][n];
PS: LZ不给分,评个最佳也行,谢谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询