| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1106 人关注过本帖
标题:怎么用 malloc 生成二维数组
只看楼主 加入收藏
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:18 
怎么用 malloc 生成二维数组
int *Cross = (int*)malloc(sizeof(int)*N);
int **total = (int **)malloc(sizeof(Cross)*N);


我的第一想法就是上面这般。但是很遗憾不行。。。
我想用malloc 生成个二维数组
就像int total[N][N]  这样一般的。
2014-12-05 18:55
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define N 10

int main(void) {
    int *Cross = (int*)malloc(sizeof(int) * N);
    int **total = (int **)malloc(sizeof(Cross) * N);
    free(total);
    free(Cross);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-05 20:31
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:3 
int *Cross = (int*)malloc(sizeof(int)*N);
int **total = (int **)malloc(sizeof(Cross)*N);

这种方式搞出来的并不是int的二位数组
只是元素为int*的数组而已。
另外严格的说,c语言没有多维数组的概念。只有数组的数组这样的概念。

int arr[5];
int index=2;

这个时候arr[index]等同于index[arr],如果你能够理解为什么会这样,你才能对数组了解得深入一些。

[ 本帖最后由 八画小子 于 2014-12-5 20:48 编辑 ]
2014-12-05 20:45
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
先说一下,楼主在找别的资料找到了这个,还没看,楼上的解答也没看,我不知道下面的有没有用,先在论坛里保存一下,对于这个问题。我明天有空再回来看大家的解答

//在堆中开辟一个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);
}

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2014-12-05 20:56
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:3 
下面表示p[ROW][COL]二维数组
int (*p)[COL]  = (int (*)[COL])malloc(sizeof(int [COL])*ROW)
程序代码:
#include<stdio.h>

int main(void)
{   
    int i,j;
    int (*p)[2] = (int (*)[2])malloc(sizeof(int [2])*2);
    for(i = 0; i<2; i++){ 
            for(j = 0; j<2; j++){
                    printf("输入第%d行第%d个数字:",i+1,j+1);
                    scanf("%d",&p[i][j]);
            } 
    }
     for(i = 0; i<2; i++){ 
            for(j = 0; j<2; j++){
                    printf("%d ",p[i][j]);
            } 
            printf("\n");
    }
    system("pause");
    return 0;
}


[ 本帖最后由 liao06550107 于 2014-12-6 23:54 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2014-12-06 12:48
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:3 
5楼描述的很准确,对这个问题更详细的解释在有关C语言复杂声明的知识里会讲到。《C专家编程》和《C和指针》这两本书都讲得不错,特别是前者讲得更详细。

[qq]949654600[/qq]
2014-12-08 15:11
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    unsigned long i, j, m, n;
    int *p = NULL;
    scanf("%ld %ld", &m, &n);
    fflush(stdin);
    p = malloc(m * n * sizeof(int));

    if(p == NULL) {
        printf("malloc error!\n");
        exit(1);
    }

    for(i = 0; i < m; i++) {
        for(j = 0; j < n; j++) {
            printf("输入第%ld行第%ld个数字:", i + 1, j + 1);
            scanf("%d", p + i * m + j);
            fflush(stdin);
        }
    }

    for(i = 0; i < m; i++) {
        for(j = 0; j < n; j++) {
            printf("%d ", *(p + i * m + j));
        }

        printf("\n");
    }

    free(p);
    return 0;
}


[ 本帖最后由 longwu9t 于 2014-12-8 20:25 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-08 20:23
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:3 
以下是引用longwu9t在2014-12-8 20:23:13的发言:

 
#include  
#include  
 
int main(void) {
    unsigned long i, j, m, n;
    int *p = NULL;
    scanf("%ld %ld", &m, &n);
    fflush(stdin);
    p = malloc(m * n * sizeof(int));
 
    if(p == NULL) {
        printf("malloc error!\n");
        exit(1);
    }
 
    for(i = 0; i < m; i++) {
        for(j = 0; j < n; j++) {
            printf("输入第%ld行第%ld个数字:", i + 1, j + 1);
            scanf("%d", p + i * m + j);
            fflush(stdin);
        }
    }
 
    for(i = 0; i < m; i++) {
        for(j = 0; j < n; j++) {
            printf("%d ", *(p + i * m + j));
        }
 
        printf("\n");
    }
 
    free(p);
    return 0;
}

    fflush(stdin);

这个好像只有微软支持
2014-12-08 20:48
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
以下是引用zklhp在2014-12-8 20:48:02的发言:


    fflush(stdin);

这个好像只有微软支持
我也用这个

DO IT YOURSELF !
2014-12-08 20:52
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
mingw32 gcc 4.8.1也支持

Only the Code Tells the Truth             K.I.S.S
2014-12-08 20:55
快速回复:怎么用 malloc 生成二维数组
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017297 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved