t**g 发帖数: 1164 | 1 我想生成一个double[n][4]的2维矩阵(注意n必须在第一个位置)
其中n是运行期才知道
请教怎么声明这个函数指针?(就是说动态生成一个array,其中每个元素是一个size
4的
小array)
当然我可以用两个new操作做到
double **A;
A=new double*[n];
for(int i=0;i
A[i]=new double[4];
可是假如我只想用一个new
该怎么做?
好像可以声明
double *A[4];
可是delete[] A就不行
谢谢! |
O*******d 发帖数: 20343 | 2 用一个n*4的一维数组。
double *A = new double[n * 4];
不能用index。可以用下法
for(int i = 0; i < n; ++i)
for(int j = 0; j < 4; ++j)
*(A + n * i + j) = whatever; |
O*******d 发帖数: 20343 | 3 上法在图像处理中用的极多。 图像的象素参数,例如色彩,都是放在一维数组里的,
但需要事先知道图像的高和宽才能正确处理图像。数组本身没有高宽信息。 |
i******r 发帖数: 323 | 4 这样可以吗?
可以从打印出来的地址看出这些cell是连续的
和直接定义二位数组效果一样
#include
using namespace std;
typedef double D4[4];
D4 *A;
int main(void)
{
int n = 3;
A = new D4[n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < 4; ++j)
printf("%p\n", &A[i][j]);
return 0;
}
size
【在 t**g 的大作中提到】 : 我想生成一个double[n][4]的2维矩阵(注意n必须在第一个位置) : 其中n是运行期才知道 : 请教怎么声明这个函数指针?(就是说动态生成一个array,其中每个元素是一个size : 4的 : 小array) : 当然我可以用两个new操作做到 : double **A; : A=new double*[n]; : for(int i=0;i: A[i]=new double[4];
|
f******y 发帖数: 2971 | 5 用二维的vector,非常容易,还不用担心delete的问题。 |
t**o 发帖数: 144 | 6 和OverCloud一样,好多年没有用过二维数组了,尽管经常要处理二维数据。 |
t**g 发帖数: 1164 | 7 可是vector size是动态增长的
会不会导致效率比较低?
【在 f******y 的大作中提到】 : 用二维的vector,非常容易,还不用担心delete的问题。
|
t**g 发帖数: 1164 | 8 嗯
的确是一个办法
谢谢
不过C++里没有别的直接解决的办法了么?
【在 O*******d 的大作中提到】 : 用一个n*4的一维数组。 : double *A = new double[n * 4]; : 不能用index。可以用下法 : for(int i = 0; i < n; ++i) : for(int j = 0; j < 4; ++j) : *(A + n * i + j) = whatever;
|
|
t**g 发帖数: 1164 | 9 这是C吗?
我用的C++
让我试试
谢谢
【在 i******r 的大作中提到】 : 这样可以吗? : 可以从打印出来的地址看出这些cell是连续的 : 和直接定义二位数组效果一样 : #include : using namespace std; : typedef double D4[4]; : D4 *A; : int main(void) : { : int n = 3;
|
O*******d 发帖数: 20343 | 10 把 *(A + n * i + j)写成一个macro, 用起来也很方便。
例如
#define slot(a, b, c) (*(a + n * b + c))
...
...
...
slot(A, i, j) = whatever;
【在 t**g 的大作中提到】 : 嗯 : 的确是一个办法 : 谢谢 : 不过C++里没有别的直接解决的办法了么?
|
t****t 发帖数: 6806 | 11 这个未免也太容易出错了
【在 O*******d 的大作中提到】 : 把 *(A + n * i + j)写成一个macro, 用起来也很方便。 : 例如 : #define slot(a, b, c) (*(a + n * b + c)) : ... : ... : ... : slot(A, i, j) = whatever;
|
f******y 发帖数: 2971 | 12 你可以固定长度啊。
【在 t**g 的大作中提到】 : 可是vector size是动态增长的 : 会不会导致效率比较低?
|
g****n 发帖数: 14 | 13 A (*pA)[4] = new A[n][4]; |