从c-malloc矩阵到java数组
我有一个c代码:从c-malloc矩阵到java数组,java,c,matrix,multidimensional-array,malloc,Java,C,Matrix,Multidimensional Array,Malloc,我有一个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中转换此数据结构的最佳方法是什么 ============================================== 调试这两个代码我有两种不同的行为: m=8 and n=
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中转换此数据结构的最佳方法是什么
==============================================
调试这两个代码我有两种不同的行为:
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);
}
double **a;
a = (double **)malloc( (r)*sizeof(double *));
for(i=0; i<r; i++)
a[i] = (double *)malloc( (c)*sizeof(double));
double**a;
a=(双**)malloc((r)*sizeof(双*);
对于(i=0;iC中的循环应为
for(i=0; i<=m+2; i++)
for(i=0;i在Cdouble**a;
中创建指向指针的指针,使用malloc可以得到多维数组
此帖子详细说明了从0索引的原因:
这篇文章详细说明了为什么不能在C语言中打印动态分配数组的大小
#包括
#包括
int main(){
int i,m,n;
m=5;
n=7;
双**a;
a=(双**)malloc((m)*sizeof(双*);
a[0]=(双*)malloc((m*n)*sizeof(双));
对于(i=1;i我在C中看到矩阵初始化的方式如下:
1.You allock N blocks-representing the lines
2.THen you go ot each line and say:ok,you are getting M values
我知道这和你刚才写的有点多余,但当你看一下初始化矩阵的两种不同方法时,你会发现两个主要区别:
malloc,这里只是说会有这种类型的东西[即使你没有说C中有类型]
calloc,向前一步并初始化所有内容,将默认值
放在那里-您可以将其视为接近JVM的第一步
Java可以被看作是编译器顶部的一个层。您不必担心它设置值的方式,因为您将在该地址中拥有某些内容。关于JVM,您应该始终记住的另一件事是,当值为Null
[别忘了这个小家伙,你会多次面对这个问题]
关于你的第一个问题:
你不需要去M+2+1计算你应该去的行数M+2[最后一个元素]-0[第一个元素]+1
,这是你计算数组元素数的实际方法,所以你的for应该从这个位置开始
为什么要使用表单0?[很抱歉粘贴了相同的链接,但有点相关]对C不太熟悉,但是如果C代码创建了一个大小为(M+3)乘以(N+2)的2D数组,那么是,如果不是,那么不是。因为java代码将创建一个具有该特定大小的2D数组。在C版本中,是否跳过第一行故意或只是一个输入错误?标准警告:不要按malloc
&朋友返回的void*
进行强制转换。您可以向我们展示您的java代码,您最多只能访问[10][15]a[0]=(double*)malloc((mn)*sizeof(double));我不明白为什么是mn…为什么不是n?这里是从堆中为行分配内存。它预先分配所有内存,然后下面的几行循环通过并分配指向下一行开头的指针作为最后一行的位置,并加上每行的大小n。嗯,对不起,我不明白其中的区别e、 如果我必须要malloc matrix[row][cols]…我编辑了我的答案,因为我有点困惑…看看你是否可以。谢谢@crawford Wynesi我不完全确定,但我认为我们需要预先分配所有行。如果只是n,那么我们只分配一行。我认为上面两种解决方案都是正确的。
for(i=0; i<=m+2; i++)
#include <stdlib.h>
#include <stdio.h>
int main() {
int i,m,n;
m = 5;
n = 7;
double **a;
a = (double **)malloc((m)*sizeof(double *));
a[0]=(double*) malloc((m*n)*sizeof(double));
for(i=1; i<m; i++)
a[i]=a[i-1] + n;
double x = 0.123412;
double y = 3.111222;
a[1][1] = x;
a[4][6] = y;
printf("element in a[1][1] %f \n" , a[1][1]);
printf("element in a[3][3] %f \n" , a[3][3]);
printf("element in a[4][6] %f \n" , a[4][6]);
printf("rows %d \n", m);
printf("cols %d", n);
}
1.You allock N blocks-representing the lines
2.THen you go ot each line and say:ok,you are getting M values