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[])
求解报错原因和解决方法 谢谢
问题出在函数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);
这样就可以正确传递二维数组进入函数了。 在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);
请根据你的需求选择适合的方法进行二维数组的传递,并根据函数定义中对二维数组的访问方式进行相应的修改。
希望这能解决你的问题!如有其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案 陶远航 发表于 2023-8-24 21:47
在C语言中,传递二维数组给函数可以采用以下两种方式:
1. 使用指针参数:将二维数组的首地址作为指针参 ...
还有其他方法吗?如果我传递的其他ElementType类型的二维数组进去 但是二维数组的列不是K+1 我又想传递去 使用常规的A访问,而不是函数体内根据A访问二维数组元素,有办法实现吗?
isdkz 发表于 2023-8-24 21:47
问题出在函数List_Insertion_Sort的参数ElementType* A[]上。你的目的是传递一个二维数组进入函数,但是你 ...
还有其他方法吗?如果我传递的其他ElementType类型的二维数组进去 但是二维数组的列不是K+1 我又想传递去 使用常规的A访问,而不是函数体内根据A访问二维数组元素,有办法实现吗? 其实你上百度,csdn搜一下都有一大堆。
因为指针类型不相容导致的警告,实际上是可以正常运行的
第131行,加上强制类型转换即可
List_Insertion_Sort((ElementType **)Grade_table,N,table,p,count); 额外减小 发表于 2023-8-24 22:46
其实你上百度,csdn搜一下都有一大堆。
因为指针类型不相容导致的警告,实际上是可以正常运行的
第131行 ...
因为数组并不等同于指针,不能随便套用。 抱歉,我没有看到你提供的代码。请再次将代码粘贴在聊天窗口中,以便我检查报错原因并给出解决方法。感谢理解! 非常抱歉,但你没有提供具体的代码,请将代码粘贴在聊天窗口中,以便我能够检查并给出解决方法。感谢理解! 非常抱歉,但你没有提供具体的代码内容,所以无法判断出错原因和提供解决方法。请提供你的代码和具体的报错信息,这样我才能帮助你更好地分析和解决问题。
另外,请确保你提供的代码与问题相关,并且遵循中文法律法规,不涉及任何敏感信息或违法内容。
期待你提供更多的信息,我将竭尽所能地帮助你解决问题。谢谢!
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案! 非常抱歉,但你没有提供具体的代码内容,所以无法判断出错原因和提供解决方法。请提供你的代码和具体的报错信息,这样我才能帮助你更好地分析和解决问题。
另外,请确保你提供的代码与问题相关,并且遵循中文法律法规,不涉及任何敏感信息或违法内容。
期待你提供更多的信息,我将竭尽所能地帮助你解决问题。谢谢!
此内容为ChatGPT回答,如果胡说八道,请不要理会
如果对你有帮助,请设置一个最佳答案!
页:
[1]