回 帖 发 新 帖 刷新版面

主题:[讨论]C中函数调用出错

代码本身的结构不用考虑,只是在编译时VC提示三个函数Copy,Calculation,Compare参数转化有问题,我检查过,函数中参数使用应该没有错误,求解释~~~~~谢谢啦(代码如下)
#include<stdio.h>
#include<math.h>
#define N 5
#define M 9
void Copy(double b[5][9],double a[5][9])
{
    int i,j;
    for(i=0;i<N;i++)
    {
        for(j=0;j<M;j++)
        {
            a[i][j]=b[i][j];
        }
    }
}
void Calculation(double b[5][9])

    int i,j;
    for(i=3;i>0;i--)
    {
        for(j=1;j<8;j++)
        {
            b[i][j]=(1.0/4)*(b[i-1][j]+b[i][j-1]+b[i+1][j]+b[i][j+1]);
        }
    }

}
int Compare(double b[5][9],double c[5][9])    
{
    int i,j;
    int flag=0;
    for(i=0;i<5;i++)
    {
        for(j=0;j<9;j++)
        {
            if(fabs(b[i][j]-c[i][j])<0.005);
            else 
            {
                flag=1;
                return(flag1);
            }

        }
    }
    return flag;
}
void main()
{
    double b[5][9],c[5][9];
    int i,j;
    int k;
    for(i=0;i<5;i++)
        {
            for(j=0;j<9;j++)
            {
                if(j==8) b[i][j]=100.0;
                else b[i][j]=0;
            
            }
        }
        for(i=0;i<5;i++)
        {
            for(j=0;j<9;j++)
            {
                printf("%.4f  ",b[i][j]);
            }
            printf("\n");
        }
        do
        {
        Copy(b[5][9],c[5][9]);
        Calculation(b[5][9]);
        }while(Compare(b[5][9],c[5][9]));
        for(i=1;i<4;i++)
        {
            for(j=1;j<8;j++)
            {
                printf("%.4f ",b[i][j]);
            }
            printf("\n");
        }
}

回复列表 (共3个回复)

沙发

line 72 :cannot convert parameter 1 from 'double' to 'double [][9]';
形参为二维数组,b[5][9]在传递时为数组的一个元素、

板凳

小错误:return(flag1)中改为flag.
编译错误主要原因:copy和caculation两个函数的参数错误,你函数的形参都是二维数组中的一个元素,记b[5][9]和a[5][9],传递的仅仅是这二维数组中这两个特定数组元素的值。而你却在函数中对整数数组进行访问,赋值,这显然是不可能实现的。
建议:把数组名作为参数传递。

3 楼

是的,我直接把函数调用里面的改成(b,a)了,直接把数组名交给函数。谢谢啦

我来回复

您尚未登录,请登录后再回复。点此登录或注册