gpt4 book ai didi

java - 从 c malloc 矩阵到 java 数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:14 24 4
gpt4 key购买 nike

我有这个 C 代码:

double **a;
a = (double **)malloc( (m+2+1)*sizeof(double *));
for(i=1; i<=m+2; i++)
a[i] = (double *)malloc( (n+1+1)*sizeof(double));

而且我必须用 Java 代码进行转换。我不确定但是,等同于用 java 编写这个吗?:

double[][] a = new double[m+2+1][n+1+1] 

在 java 中转换此数据结构的最佳方法是什么?

==============================================

调试 2 个代码我有 2 个不同的行为:

m=8 and n=13

调试c代码,我最多可以访问a[14][407]

   int main() {

int i,m,n;
m = 2;
n = 2;

double **a;
a = (double **)malloc( (m+2+1)*sizeof(double *));
for(i=1; i<=m+2; i++)
a[i] = (double *)malloc( (n+1+1)*sizeof(double));

int num_rows = sizeof(a) / sizeof(a[0]);
int num_cols = sizeof(a[0]) / sizeof(a[0][0]);
printf("r %d c %d", num_rows, num_cols);
}

调试 java 代码到 a[10][15]

有什么区别?

谢谢

============================================ 对于@crawford-whynnes

TO DO: Allocate a matrix of rows = r and cols = c

  1. 第一个解决方案

    double **a;
    a = (double **)malloc((r)*sizeof(double *));
    a[0]=(double*) malloc((r*c)*sizeof(double));
    for(i=1; i<r; i++)
    a[i]=a[i-1] + n;
  2. 第二个解决方案

    double **a;
    a = (double **)malloc( (r)*sizeof(double *));
    for(i=0; i<r; i++)
    a[i] = (double *)malloc( (c)*sizeof(double));

什么是正确的解决方案?第一还是第二?

在第二个解决方案中,我有一个 matrix of rows = r and cols = r*c 而不是 matrix of rows = r and cols = c...它是对吗?

谢谢

最佳答案

C中的循环应该是

for(i=0; i<=m+2; i++)

否则第一行将保持未分配状态。

这样改完之后,java代码就和C代码差不多了。将 malloc 更改为 calloc(用于分配内存的零初始化)以获得 java 代码的等价物。

关于java - 从 c malloc 矩阵到 java 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31589392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com