如何动态申请二维数组空间(在行数不确定的前提下)
#include <iostream>using namespace std;
int main()
{
int num, L, H;
cin >> num >> L >> H; //int(*p);
int **p; //cin >> num >> L >> H;
p = new int*; //p = new int ;
for (int i = 0; i < 5; i++)
{
p = new int
}
}左边是二级指针方法,右边是错误的方法,如果不用二级指针应该怎么做? 根据具体的二维数组长度计算其转换为一维,然后再用new vector<vector<类型>> 容器名; 经测试,可以使用,没有问题
int num = 3;
int (*p) = new int;
for (int i = 0; i < num; ++i) {
for (int j = 0; j < 5; ++j) {
p = 5 * i + j;
}
}
for (int i = 0; i < num; ++i) {
for (int j = 0; j < 5; ++j) {
cout << p << " ";
}
cout << endl;
}
cout << "p: " << *(*(p+1)+3) << endl;
delete[] p;
运行结果
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
p: 8 BFSDT 发表于 2018-5-28 20:07
经测试,可以使用,没有问题
你试一下num改为外部输入。 风过无痕丶 发表于 2018-5-28 13:44
大概知道一些,不过不打算用这个。想用指针解决 程序员的救赎 发表于 2018-5-28 20:13
你试一下num改为外部输入。
没区别的
输入5之后
5
5
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
p: 8 BFSDT 发表于 2018-5-28 20:18
没区别的
输入5之后
你的是对的,不过我不给p初始化,例如
int *p, num;
cin >> num;
p = new int;
就会提示错误了,那如何在定义之后再赋值呢? 程序员的救赎 发表于 2018-5-28 21:04
你的是对的,不过我不给p初始化,例如
就会提示错误了,那如何在定义之后再赋值呢?
我这里分开也是没问题的,你应该是打错了吧
int *p, num;
正确的应该是
int (*p), num; BFSDT 发表于 2018-5-28 21:14
我这里分开也是没问题的,你应该是打错了吧
正确的应该是
是的!两者各自的含义不是一样的吗? 程序员的救赎 发表于 2018-5-28 23:18
是的!两者各自的含义不是一样的吗?
不一样,int(*p)表示的是含有任意个数元素的数组,其中每个元素都是一个int数组,也就是
{
{1,2,3,4,5},
{1,2,3,4,5},
……
{1,2,3,4,5}
}
而int*p表示的是一个有5个元素,每个元素都是int*的固定大小的数组,即
{int*, int* , int* ,int*,int*}
虽然int*可以指向一个数组,但是由于指向的不一定是int的数组,所以不能匹配
页:
[1]