代码工作正常我只是担心我收到的警告消息,有没有办法使它们不出现?有什么理由担心他们吗?在代码的更深处,我不太明白我做了什么或为什么它有效。它以前不起作用,所以我查找了其他人用指针做了什么,现在它可以工作
Warning passing argument 1 of 'readarray' from incompatible pointer type [-wincomp
readarray(&a);
^
note: expected 'int*' but argument is of type 'int(*)[10]'
void readarray (int*);
^
这是警告消息,我为每个函数都收到它^^^^^^^^^^^^^^^^^^
我想,我明白为什么它有问题,但我不明白我怎么能改变任何东西
#include <stdio.h>
#define n 10
void readarray (int*);
int findmaxvalue(int*);
void reversearray(int*, int*);
void printarray(int*);
int main(void)
{
int a[n], i, b[n];
for (i = 0; i < n; i++)
{
a[i] = 0;
}
for (i = 0; i < n; i++)
{
b[i] = 0;
}
readarray(&a);
findmaxvalue(&a);
reversearray(&a, &b);
printarray(&b);
return 0;
}
void readarray (int *a)
{
int *q;
q = a;
printf("Enter up to 10 numbers. Terminate by entering a 0n");
就在这里,为什么我不能使用"a"而不是"a+n">
for(q = a; q < a+n; q++)
{
scanf("%d", q);
if (*q == 0)
break;
}
printf("n");
}
int findmaxvalue(int *a)
{
int i, max;
max = a[0];
for (i = 1; i < n; i++)
{
if (a[i] > max)
max = a[i];
}
printf("The highest element in the array is: %dnn", max);
return max;
}
void reversearray(int *a, int *b)
{
int *i, *j, t;
for (i = a; i < a+n; i++)
{
for (j = i + 1; j < a+n; j++)
{
if (*j < *i)
{
t = *j;
*j = *i;
*i = t;
}
}
}
for (i = a + n - 1, j = b; i > a; i--, j++)
{
*j = *i;
}
}
void printarray(int *b)
{
int *q;
q = b;
printf("The reversed array in descending order is:n");
for (q = b; q < b+n; q++)
{
printf("%d ", *q);
}
}
错误消息非常自描述。
在您的代码中,a
是一种数组类型,具有 int [10]
.你传递 &a
,它是指向 10 int
s 数组的指针类型,或者,int (*)[10]
与指向 int
的指针类型不同,即 int *
。因此,编译器尖叫。
由于数组类型变量在作为函数参数传递时衰减到指向数组第一个元素的指针,因此您应该像
readarray(a);