sri*_*dan 3 c arrays dynamic-allocation
我创建了一个二维数组,其内容如下
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);
}
Run Code Online (Sandbox Code Playgroud)
// 我为这个数组中的所有元素分配了一个值 0,如下所示
for(i=0;i<(lx+2)*(ly+2);i++)
{
a[i]=0;
}
Run Code Online (Sandbox Code Playgroud)
// 我打印出下面的所有元素
for(i=0;i<(lx+2)*(ly+2);i++)
{
printf("position %d values %d\n",i,a[i]);
}
Run Code Online (Sandbox Code Playgroud)
// 当我看到输出时,它向我显示了一个特定位置 13 处的垃圾值。我无法弄清楚。还请告诉我如何访问行和列,如 Eg 以访问第 7 列第 0 行和第 5 行就 lx 而言,第 6 列列,如我的代码所示
您的方法肯定朝着正确的方向发展。
我认为这:
a=(double**) malloc((lx+2)*sizeof(double));
Run Code Online (Sandbox Code Playgroud)
通常是:
a = malloc(lx * sizeof(double *));
Run Code Online (Sandbox Code Playgroud)
然后没有连续性要求,这个:
a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double));
Run Code Online (Sandbox Code Playgroud)
在大多数程序中看起来像:
a[0] = malloc(ly * sizeof(double));
Run Code Online (Sandbox Code Playgroud)
最后,最后一行需要在一个循环中,为每个循环分配a[i]自己的 malloc 空间。
但是,这不会创建连续的内存。为此,您需要进行大分配,然后将其划分为行向量。因此,而不是循环中的第二个 malloc,可能类似于:
double *t = malloc(lx * ly * sizeof(double));
for (i = 0; i < lx; ++i)
a[i] = t + i * ly;
Run Code Online (Sandbox Code Playgroud)
把它们放在一起:
#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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |