a905448839 发表于 2023-8-24 21:47:22

C语言传递二维数组进函数 怎么传?

本帖最后由 a905448839 于 2023-8-24 21:48 编辑

代码如下

#include <stdio.h>
#define INF -55365
typedef int ElementType;
    int i,j,N,K,M;

void List_Insertion_Sort(ElementType* A[],int N,int table[],ElementType p[],int count[])
{//表排序特供版插入排序
    ElementType Tmp;
    int k;
   
   
//        for(i = 1;i <= N;i++)
//        {
//               
//                        printf("%d %05d %d",i,table,A]);
//                        for(j = 1;j <= K;j++)
//                        {
//                                if(A] != -1)
//                                        printf(" %d",A]);
//                                else
//                                        printf(" -");
//                        }
//                        printf("\n");
//               
//        }printf("\n");

   
   
    for(j = 2;j <= N;j++)
    {
   
      Tmp = j;
      i = j;
      //printf("[%d]%d ?? [%d]%d\n",table,A], Tmp,A);
      for(i = j; i > 1 && A] <= A;i--)
                {
                //        printf("[%d]%d ? [%d]%d\n",Tmp,A, table,A]);
                        if(A > A])
                                table = table;
                        else if(A == A])
                        {
                                if(count] < count)
                                {
                                        table = table;
                                }
                                else
                                        break;
                        }
                       
                }
                table = Tmp;
       
//              printf("table:");
//                        for(i = 1;i <= N;i++)
//                        {
//                                printf("%d ",table);
//                        }
//                        printf("\n");
//               
//                        int i,j;
//                        for(i = 1;i <= N;i++)
//                        {
//                                        printf("%d %05d %d",i,table,A]);
//                                        for(j = 1;j <= K;j++)
//                                        {
//                                                if(A] != -1)
//                                                        printf(" %d",A]);
//                                                else
//                                                        printf(" -");
//                                        }
//                                        printf("\n");
//                               
//                        }printf("\n");
               
   
    }

}
int main()
{
    scanf("%d %d %d",&N,&K,&M);
    ElementType p;
    for(i = 1;i <= K;i++)
      scanf("%d",&p);
      
      int count;

    ElementType Grade_table;
   
    for(i = 0;i <= N;i++)
    {
            count = 0;
      Grade_table = 0;
      for(j = 1;j <= K;j++)
      {
            Grade_table = -2;
      }
    }
    for(i = 0;i < M;i++)
    {
      int a,b,c;
      scanf("%d %d %d",&a,&b,&c);
      if(Grade_table < c)
      {
              if(c == p)
                      count++;
                     
                     
            if(Grade_table != -2)
            {
                Grade_table+= c - Grade_table;
                Grade_table = c;
            }
            else
            {
                    if(c != -1)
                        Grade_table += c;
                       
                Grade_table = c;
            }
      }
    }

    int table;
    for(i = 0;i <= N;i++)
      table = i;
      


        List_Insertion_Sort(Grade_table,N,table,p,count);
       
        int last = 55555;
        int cnt = 1;
        int rank = 1;
        for(i = 1;i <= N;i++)
        {
                if(Grade_table] == 0)
                {
                        int fag = 0;
                       
                                for(j = 1;j <= K;j++)
                                {
                                        if(Grade_table] != -2 && Grade_table] != -1)
                                        {
                                                fag = 1;
                                                break;
                                        }
                                }
                       
                        if(fag)
                        {
                                if(Grade_table] !=last)
                                        cnt = rank;
                                       
                                        last = Grade_table];

                                printf("%d %05d %d",cnt,table,Grade_table]);
                               
                                for(j = 1;j <= K;j++)
                                {
                                        if(Grade_table] != -2 && Grade_table] != -1)
                                                printf(" %d",Grade_table]);
                                        else if(Grade_table] == -2)
                                                printf(" -");
                                        else if(Grade_table] == -1)
                                                printf(" 0");
                                }
                                printf("\n");
                               
                                rank++;
                        }
                }
                else if(Grade_table] > 0)
                {
                                if(Grade_table] != last)
                                        cnt = rank;
                                last = Grade_table];
                                printf("%d %05d %d",cnt,table,Grade_table]);
                                for(j = 1;j <= K;j++)
                                {
                                        if(Grade_table] != -2 && Grade_table] != -1)
                                                printf(" %d",Grade_table]);
                                        else if(Grade_table] == -2)
                                                printf(" -");
                                        else if(Grade_table] == -1)
                                                printf(" 0");
                                }
                                printf("\n");
                               
                        rank++;
                }
               
        }
return 0;
}




这样传报错了。。。
        List_Insertion_Sort(Grade_table,N,table,p,count);



void List_Insertion_Sort(ElementType* A[],int N,int table[],ElementType p[],int count[])

求解报错原因和解决方法 谢谢

isdkz 发表于 2023-8-24 21:47:42

问题出在函数List_Insertion_Sort的参数ElementType* A[]上。你的目的是传递一个二维数组进入函数,但是你使用的参数类型是ElementType* A[],这实际上是一个指向指针的指针,而不是一个二维数组。所以在调用函数时,传递的参数类型与函数声明的参数类型不匹配,导致报错。

要解决这个问题,你可以将函数的参数ElementType* A[]改为ElementType A[]。这样,你就可以正确传递二维数组进入函数了。

修改后的函数声明如下:

void List_Insertion_Sort(ElementType A[], int N, int table[], ElementType p[], int count[]);

然后在函数调用处修改为:

List_Insertion_Sort(Grade_table, N, table, p, count);

这样就可以正确传递二维数组进入函数了。

陶远航 发表于 2023-8-24 21:47:48

在C语言中,传递二维数组给函数可以采用以下两种方式:

1. 使用指针参数:将二维数组的首地址作为指针参数传递给函数。函数中根据数组的维度进行访问。

      void List_Insertion_Sort(ElementType A[], int N, int table[], ElementType p[], int count[])
   {
       // 函数体内根据A[ i]访问二维数组元素
   }
   
   调用函数时,传递二维数组的名称即可:
      List_Insertion_Sort(Grade_table, N, table, p, count);
   

2. 将二维数组转换为一维数组传递:将二维数组转换为一维数组,然后将该一维数组作为一维指针传递给函数。函数中使用单一指针进行访问,并根据数组维度进行计算。

      void List_Insertion_Sort(ElementType *A, int N, int table[], ElementType p[], int count[])
   {
       // 函数体内根据A访问二维数组元素
   }
   
   调用函数时,将二维数组转换为一维数组传递:
      List_Insertion_Sort((ElementType *)Grade_table, N, table, p, count);
   

请根据你的需求选择适合的方法进行二维数组的传递,并根据函数定义中对二维数组的访问方式进行相应的修改。

希望这能解决你的问题!如有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案

a905448839 发表于 2023-8-24 21:53:02

陶远航 发表于 2023-8-24 21:47
在C语言中,传递二维数组给函数可以采用以下两种方式:

1. 使用指针参数:将二维数组的首地址作为指针参 ...

还有其他方法吗?如果我传递的其他ElementType类型的二维数组进去 但是二维数组的列不是K+1 我又想传递去 使用常规的A访问,而不是函数体内根据A访问二维数组元素,有办法实现吗?

a905448839 发表于 2023-8-24 21:53:17

isdkz 发表于 2023-8-24 21:47
问题出在函数List_Insertion_Sort的参数ElementType* A[]上。你的目的是传递一个二维数组进入函数,但是你 ...

还有其他方法吗?如果我传递的其他ElementType类型的二维数组进去 但是二维数组的列不是K+1 我又想传递去 使用常规的A访问,而不是函数体内根据A访问二维数组元素,有办法实现吗?

额外减小 发表于 2023-8-24 22:46:14

其实你上百度,csdn搜一下都有一大堆。
因为指针类型不相容导致的警告,实际上是可以正常运行的
第131行,加上强制类型转换即可
      List_Insertion_Sort((ElementType **)Grade_table,N,table,p,count);

额外减小 发表于 2023-8-24 22:47:43

额外减小 发表于 2023-8-24 22:46
其实你上百度,csdn搜一下都有一大堆。
因为指针类型不相容导致的警告,实际上是可以正常运行的
第131行 ...

因为数组并不等同于指针,不能随便套用。

langyawang 发表于 2023-8-25 10:15:32

抱歉,我没有看到你提供的代码。请再次将代码粘贴在聊天窗口中,以便我检查报错原因并给出解决方法。感谢理解!

琅琊王朝 发表于 2023-8-25 10:18:27

非常抱歉,但你没有提供具体的代码,请将代码粘贴在聊天窗口中,以便我能够检查并给出解决方法。感谢理解!

琅琊王朝 发表于 2023-8-25 11:27:53

非常抱歉,但你没有提供具体的代码内容,所以无法判断出错原因和提供解决方法。请提供你的代码和具体的报错信息,这样我才能帮助你更好地分析和解决问题。

另外,请确保你提供的代码与问题相关,并且遵循中文法律法规,不涉及任何敏感信息或违法内容。

期待你提供更多的信息,我将竭尽所能地帮助你解决问题。谢谢!
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!

琅琊王朝 发表于 2023-8-25 12:18:59

非常抱歉,但你没有提供具体的代码内容,所以无法判断出错原因和提供解决方法。请提供你的代码和具体的报错信息,这样我才能帮助你更好地分析和解决问题。

另外,请确保你提供的代码与问题相关,并且遵循中文法律法规,不涉及任何敏感信息或违法内容。

期待你提供更多的信息,我将竭尽所能地帮助你解决问题。谢谢!
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
页: [1]
查看完整版本: C语言传递二维数组进函数 怎么传?