gpt4 book ai didi

c - 如何分配具有连续内存的二维数组?我如何使用它来访问行和列?举个例子

转载 作者:太空狗 更新时间:2023-10-29 16:09:48 25 4
gpt4 key购买 nike

我创建了一个二维数组,内容如下

     int i,j,lx,ly;// lx,ly are the row and column respectively
double** a;

a=(double**) malloc((lx+2)*sizeof(double));

a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double));

assert(a[0]);

for(i=1;i<lx+2;i++)
{
a[i]=a[i-1]+i*(ly+2);
}

//我为这个数组中的所有元素分配了一个值 0,如下所示

    for(i=0;i<(lx+2)*(ly+2);i++)
{
a[i]=0;
}

//我在下面打印出我所有的元素

      for(i=0;i<(lx+2)*(ly+2);i++)
{
printf("position %d values %d\n",i,a[i]);
}

//当我看到输出时,它向我显示了一个特定位置 13 的垃圾值。我无法弄清楚.. 另外请告诉我如何访问行和列,例如访问第 7 列行0 和第 5 行第 6 列的 lx,ly 如我的代码所示

最佳答案

您的方法绝对是朝着正确的总体方向前进。

我认为:

a=(double**) malloc((lx+2)*sizeof(double));

通常是:

a = malloc(lx * sizeof(double *));

然后在没有连续性要求的情况下,这个:

a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double));

在大多数程序中看起来像:

a[0] = malloc(ly * sizeof(double));

最后,最后一行需要在一个循环中,为每个 a[i] 分配它自己的 malloc 空间。

但是,这不会创建连续的内存。为此,您需要进行大量分配,然后将其划分为行 vector 。所以,而不是循环中的第二个 malloc,可能是这样的:

double *t = malloc(lx * ly * sizeof(double));
for (i = 0; i < lx; ++i)
a[i] = t + i * ly;

综合起来:

#include <stdio.h>
#include <stdlib.h>

void arrayDemo(int lx, int ly)
{
double **a;
int i, j;

a = malloc(lx * sizeof(double *));
double *t = malloc(lx * ly * sizeof(double));
for(i = 0; i < lx; ++i)
a[i] = t + i * ly;

for(i = 0; i < lx; ++i)
for(j = 0; j < ly; ++j)
a[i][j] = i*100 + j;
for(i = 0; i < lx; ++i) {
for(j = 0; j < ly; ++j)
printf(" %4.0f", a[i][j]);
printf("\n");
}
}

int main(int ac, char **av)
{
arrayDemo(atoi(av[1]), atoi(av[2]));
return 0;
}

$ cc -Wall all.c
$ ./a.out 4 7
0 1 2 3 4 5 6
100 101 102 103 104 105 106
200 201 202 203 204 205 206
300 301 302 303 304 305 306

关于c - 如何分配具有连续内存的二维数组?我如何使用它来访问行和列?举个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2259773/

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