问题陈述: 给定一系列整数。对于每组5个成功元素 (1..5,6..10等)找到最小值并将其放入另一个数组( 长度为初始数组的1/5)。 使用一个函数获取指向5个元素和a的序列的指针 指向存储结果的整数的指针。
void main()
{
int n1,i,z,k;
int v[50],x[10];
printf("length of array:");
scanf("%d" , &n1);
k = -1;
readArray ( n1, v );
for (i=0; i<=n1; i++)
{
searchArray ( &k, &v[i], &x[k] );
}
writeArray ( k , x );
}
v [i]是初始数组,x [k]是结果数组,k指向x,其中应该放置结果。
void searchArray ( int *k, int * v, int * x)
{
int i,z;
bool dif;
dif = false;
z = z+1;
if (v[i-1] == (v[i]-1))
{
dif = true;
if ((dif == true) && (z == 4))
{
*k = *k+1;
x[*k] = v[i-4];
z = 0;
if (v[i]+1 == v[i+1])
{
i = i+1;
}
}
}
else if ( dif != true )
{
z = 0;
}
}
问题:对于1到10的数组,结果是x [0] = 134513473 x [1] = 6,如果我看x [-1]是1.所以不要在x [0]中放1它把它放在x [-1]中,x [0]返回内存地址。
答案 0 :(得分:1)
一个问题是这一行:
z = z+1;
您尚未将z
初始化为任何内容,因此之后使用z
的所有内容都是使用垃圾。你的下一行是:
if (v[i-1] == (v[i]-1))
由于i
未初始化,您正在再次处理垃圾。不是一件幸福的事情。
如果您正确设计,您的函数不需要k
作为参数。但是,您需要修改调用,以在数组中传递正确的偏移量。 (目前,你正在扫描0..4,1..5,2..6,而不是0..4,5..9,10..14。)