| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1351 人关注过本帖
标题:普通的二维数组,输入与输出不符,求助!
只看楼主 加入收藏
好烦、
Rank: 2
等 级:论坛游民
帖 子:78
专家分:72
注 册:2020-10-10
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:2 
普通的二维数组,输入与输出不符,求助!
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    int N,M,i,j,k,q,z;
    int *a;// 每个区域容纳人数
    int **p;// 每个人对每个区域的满意
    int s=0,max;//  s是满意度和,max是满意度最大值
    scanf("%d%d",&N,&M);//N是区域数 M是人数
    a=(int *)malloc(sizeof(int)*N);
    p=(int **)malloc(sizeof(int)*M);
    p[0]=(int *)malloc(sizeof(int)*N*M);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            scanf("%d",(*p+i)+j);
    for(i=0;i<M;i++)
        for(j=0;j<N;j++)
            printf("%d ",*((*p+i)+j));
    free(a);
    free(p);
    free(p[0]);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: for 区域 int 输入 sizeof 
2020-11-27 22:54
请输入密码
Rank: 2
等 级:论坛游民
威 望:5
帖 子:35
专家分:84
注 册:2020-11-19
收藏
得分:20 
    p[0]=(int *)malloc(sizeof(int)*N*M);


意思是给p[0]一个二维数组空间。
通常来说二维数组的地址是连续的,但动态申请二维数组的地址就不一定是连续的了(之所以说不一定,是要看具体分配代码)。
当然,楼主代码事实上是p[0][0]所在的空间的地址和p[0]不是同一个东西了,是在p[0]的基础上再独立分配空间。
因此实现这代码可以这样改:可以在一维数组p[]下面循环分配独立空间。当然这不等价于普通二维数组。只能通过p[]做媒介再调用p[][],就是二维空间地址不连续的。



[此贴子已经被作者于2020-11-28 09:34编辑过]


Bug易改,码风难移。
有事离开,无事灌水。
2020-11-28 09:07
请输入密码
Rank: 2
等 级:论坛游民
威 望:5
帖 子:35
专家分:84
注 册:2020-11-19
收藏
得分:0 
太久没敲过动态申请二维数组代码了,都生疏得不成样子了。这种赋值方法凑合看看就好。

程序代码:
#include<stdio.h>
#include<stdlib.h>

#define MALLOC(p,type,size) \
{ \
  p = type malloc(sizeof(p)*(size)); \
   if ( !(p) ) \
        exit( EXIT_FAILURE ); \
}

int main( void )
{
    int** pa = NULL;
    int* p = NULL;
    
    unsigned N;
    unsigned M;
    
    unsigned i;
    unsigned j;
    
    scanf("%u%u",&N,&M);
    
    MALLOC( pa,( int** ), N )
    MALLOC( p,( int* ), N * M )    
    
    for ( i = 0; i != M; ++i )
        pa[i] = &(p[ i * N ]);
        
    for ( i = 0; i != N * M; ++ i )
        scanf("%d",&(p[i]));
        
    for ( i = 0; i != M; ++ i )
        for ( j = 0; j != N; ++ j )
            printf("%-4d%c", pa[i][j], "\n"[ j != N - 1 ]);
    
    free(p);
    free(pa);
    
    return 0;
}

Bug易改,码风难移。
有事离开,无事灌水。
2020-11-28 10:49
快速回复:普通的二维数组,输入与输出不符,求助!
数据加载中...
 
   



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

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