程序停止,我得到一个" merge.exe已停止工作"信息。我简化了一切,但在调用函数时似乎发生了问题...
#include <stdio.h>
#include <stdlib.h>
#define br 1000
int sort(int *list[],int broi);
int merge(int list1[],int list2[],int broi1,int broi2);
int main()
{
int i,n,m,a1[br],a2[br],a;
printf("gimme n: ");
scanf("%d",&n);
printf("gimme m: ");
scanf("%d",&m);
for(i=0;i<n;i++)
{
printf("gimme element %d ot list1: ",i+1);
scanf("%d",&a1[i]);
}
for(i=0;i<m;i++)
{
printf("gimme element %d ot list2: ",i+1);
scanf("%d",&a2[i]);
}
sort(&a1,n);
sort(&a2,m);
merge(a1,a2,n,m);
return 0;
}
int sort(int *list[],int broi)
{
int i,j,c;
for (i = 0; i < broi-1; i++)
{
for (j = 0; j < broi-i-1; j++)
{
if (*list[j] > *list[j+1])
{
c=*list[j];
*list[j]=*list[j+1];
*list[j+1]=c;
}
}
}
return 1;
}
int merge(int list1[],int list2[],int broi1,int broi2)
{
printf(" AAAAAA");
return 1;
}
sort()
功能非常明显,甚至有效!
但无论我在merge()
中放置什么,它都不会赢得工作而且会打破整个计划。
答案 0 :(得分:1)
在sort()函数中,它是非常不言自明的,它甚至可以工作! ?没有它不会工作。通过使用-Wall
编译
reo.c:4:5:注意:预期'int **'但是参数的类型为'int *',因为你传递了
a1
&amp;的地址捕获指针数组。相反,只需传递数组名称并使用指针捕获。
使函数调用看起来像
sort(a1,n);/*just pass the array name */
sort(a2,m);
sort()
int sort(int *list,int broi){ /* take list is ptr variable */
int i,j,c;
for (i = 0; i < broi-1; i++) {
for (j = 0; j < broi-i-1; j++) {
if (list[j] > list[j+1]) {
c=list[j];
list[j]=list[j+1];
list[j+1]=c;
}
}
}
}
答案 1 :(得分:0)
pip
使int *list[]
指向list
的指针数组。在int
函数main
(例如)中,创建一个指向类型为&a1
的{{1}}数组的指针。 int
(从第一个开始)与int (*)[1000]
不同。
简单的解决方案?不要将指针传递给阵列!这很少需要。
无论如何,由于operator precedence int**
之类的表达式与int (*)[1000]
相同,如果你有一个指向数组的指针,你需要*list[i]
。因此,许多错误都不能成为一种权利。
你的编译器应该一直在向你发出警告。