qq_53625821 2021-12-16 11:38 采纳率: 100%
浏览 21
已结题

我想将主函数中输入的二维数组的值通过函数调用放到一个新数组中,但是一直报错

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
static int cz[MAX][MAX];
static int cc[MAX][MAX];
static int cd[MAX][MAX];
static int r[MAX][MAX];
void initc(int x[][MAX],int y[][MAX],int n)
{ 
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            x[i][j]=y[i][j];
        }        
    } 
}

int main()
{
    int  i,j,N;
    printf("选择要输入几阶矩阵\n"); 
    scanf("%d",&N); 
    int** r;int** c;
    printf("请输入关系矩阵真值(0或1):\n");
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
      {
          scanf("%d",&r[i][j]);  
      }
      
    } //输出矩阵;
        for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            if(r[i][j]!=0&&r[i][j]!=1)
            {
                printf("输错了");
                return 0; 
            }
        }
    }
int cz[N][N],cd[N][N],cc[N][N];
   cz=initc (cz,r,N);
//求自反闭包 
for(i=0;i<N;i++)
    {
        cz[i][i]=1;//将主对角线全部改为1
    }
printf("自反闭包的矩阵"); 

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-12-16 11:43
    关注

    initc函数返回为void,你这么写成 cz = initc(cz,r,N);呢?
    r和c是指针的指针,指针只是一个地址存储,你得给它们分配空间才行。而且你明明上面已经定义了四个全局变量数组,完全够用了,不需要再定义这两个指针的,直接用全局变量cc和r。同样45行的三个临时变量删除掉,全局都已经定义了,怎么又定义一堆临时变量呢
    修改一下:

    #include<stdio.h>
    #include<stdlib.h>
    #define MAX 100
    static int cz[MAX][MAX];
    static int cc[MAX][MAX];
    static int cd[MAX][MAX];
    static int r[MAX][MAX];
    void initc(int x[][MAX],int y[][MAX],int n)
    { 
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                x[i][j]=y[i][j];
            }        
        } 
    }
    int main()
    {
        int  i,j,N;
        printf("选择要输入几阶矩阵\n"); 
        scanf("%d",&N); 
        printf("请输入关系矩阵真值(0或1):\n");
        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
            {
                scanf("%d",&r[i][j]);  
            }
        } //输出矩阵;
        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
            {
                if(r[i][j]!=0&&r[i][j]!=1)
                {
                    printf("输错了");
                    return 0; 
                }
            }
        }
        initc (cz,r,N);
        //求自反闭包 
        for(i=0;i<N;i++)
        {
            cz[i][i]=1;//将主对角线全部改为1
        }
        printf("自反闭包的矩阵"); 
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 创建了问题 12月16日

悬赏问题

  • ¥35 VBA-JSON中文乱码报错
  • ¥50 dac adc的检定规程
  • ¥20 MIT控制器能控制不稳定系统吗
  • ¥15 公司代码X对业务伙伴X无效,处理方法?
  • ¥15 微信内链接跳转到浏览器打开怎么实现
  • ¥15 三角波可以直接加施密特电路整形到矩形波吗实物
  • ¥15 html,php,在使用html请求php文件时发生了错误,无法请求到php文件读取数据库并用javascript进行数据显示,刷新
  • ¥15 touchsocket udp组播
  • ¥20 MAC怎么安装Silverlight 插件?以及安装了怎么启用
  • ¥15 gis系统开发出现命名空间“ESRI.ArcGIS”中不存在类型或命名空间名“Analyst3D”报错