首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问怎么存储一个长度可变的多维数组

2012-06-25 
请教如何存储一个长度可变的多维数组?例如一个三维数组,第一维长度是200.第二维也是200,第三维长度不定,可

请教如何存储一个长度可变的多维数组?
例如一个三维数组,第一维长度是200.第二维也是200,第三维长度不定,可能是3也可能是300

(另外还有一个参数用于指定第三维的权重。这个权重可以用另外开辟一个200*200的数组保存)

如果分配成200*200*300就太浪费了,想问一下这种情况,使用什么方法存储比较好?

我原来打算用结构体数组的,这样数组为大小为200*200,每个数组的元素是一个结构体,

结构体中包含三个元素,第一个元素是数组长度,第二个元素是权重,第三个元素是数组。

但是发现这样也挺麻烦。

请问这种情况下一般使用什么方法保存?



[解决办法]

探讨
例如一个三维数组,第一维长度是200.第二维也是200,第三维长度不定,可能是3也可能是300

(另外还有一个参数用于指定第三维的权重。这个权重可以用另外开辟一个200*200的数组保存)

如果分配成200*200*300就太浪费了,想问一下这种情况,使用什么方法存储比较好?

我原来打算用结构体数组的,这样数组为大小为200*200,每个数组的元素是一个结构体,

结构体中包……

[解决办法]
http://blog.csdn.net/supermegaboy/article/details/4854899
[解决办法]
malloc一下不就行了
[解决办法]
指针数组,动态分配吧。
[解决办法]
vector<vector <int> >vvi;
[解决办法]
动态分配空间 malloc calloc realloc
[解决办法]
C/C++ code
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() {    p=(int **)malloc(4*sizeof(int *));    if (NULL==p) return;    for (i=0;i<4;i++) {        p[i]=(int *)malloc(5*sizeof(int));        if (NULL==p[i]) return;    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            p[i][j]=i*5+j;        }    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            printf(" %2d",p[i][j]);        }        printf("\n");    }    for (i=0;i<4;i++) {        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19//在堆中开辟一个3×4×5的3维int数组#include <stdio.h>#include <malloc.h>int ***p;int i,j,k;void main() {    p=(int ***)malloc(3*sizeof(int **));    if (NULL==p) return;    for (i=0;i<3;i++) {        p[i]=(int **)malloc(4*sizeof(int *));        if (NULL==p[i]) return;        for (j=0;j<4;j++) {            p[i][j]=(int *)malloc(5*sizeof(int));            if (NULL==p[i][j]) return;        }    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            for (k=0;k<5;k++) {                p[i][j][k]=i*20+j*5+k;            }        }    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            for (k=0;k<5;k++) {                printf(" %2d",p[i][j][k]);            }            printf("\n");        }        printf("---------------\n");    }    for (i=0;i<3;i++) {        for (j=0;j<4;j++) {            free(p[i][j]);        }        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19//---------------// 20 21 22 23 24// 25 26 27 28 29// 30 31 32 33 34// 35 36 37 38 39//---------------// 40 41 42 43 44// 45 46 47 48 49// 50 51 52 53 54// 55 56 57 58 59//---------------//在堆中开辟一个2×3×4×5的4维int数组#include <stdio.h>#include <malloc.h>int ****p;int h,i,j,k;void main() {    p=(int ****)malloc(2*sizeof(int ***));    if (NULL==p) return;    for (h=0;h<2;h++) {        p[h]=(int ***)malloc(3*sizeof(int **));        if (NULL==p[h]) return;        for (i=0;i<3;i++) {            p[h][i]=(int **)malloc(4*sizeof(int *));            if (NULL==p[h][i]) return;            for (j=0;j<4;j++) {                p[h][i][j]=(int *)malloc(5*sizeof(int));                if (NULL==p[h][i][j]) return;            }        }    }    for (h=0;h<2;h++) {        for (i=0;i<3;i++) {            for (j=0;j<4;j++) {                for (k=0;k<5;k++) {                    p[h][i][j][k]=h*60+i*20+j*5+k;                }            }        }    }    for (h=0;h<2;h++) {        for (i=0;i<3;i++) {            for (j=0;j<4;j++) {                for (k=0;k<5;k++) {                    printf(" %3d",p[h][i][j][k]);                }                printf("\n");            }            printf("--------------------\n");        }        printf("=======================\n");    }    for (h=0;h<2;h++) {        for (i=0;i<3;i++) {            for (j=0;j<4;j++) {                free(p[h][i][j]);            }            free(p[h][i]);        }        free(p[h]);    }    free(p);}//   0   1   2   3   4//   5   6   7   8   9//  10  11  12  13  14//  15  16  17  18  19//--------------------//  20  21  22  23  24//  25  26  27  28  29//  30  31  32  33  34//  35  36  37  38  39//--------------------//  40  41  42  43  44//  45  46  47  48  49//  50  51  52  53  54//  55  56  57  58  59//--------------------//=======================//  60  61  62  63  64//  65  66  67  68  69//  70  71  72  73  74//  75  76  77  78  79//--------------------//  80  81  82  83  84//  85  86  87  88  89//  90  91  92  93  94//  95  96  97  98  99//--------------------// 100 101 102 103 104// 105 106 107 108 109// 110 111 112 113 114// 115 116 117 118 119//--------------------//=======================// 

热点排行