代码工作正常我只是担心我收到的警告消息,是否有办法让它们不出现?有什么理由为他们担心吗?在代码的更下方,我不太明白我做了什么或者它为什么起作用。它以前没有用,所以我查看了其他人用指针所做的事情,现在它可以用了
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 0\n");
就在这里,为什么我不能用'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: %d\n\n", 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);
}
}
最佳答案
我认为错误消息非常 self 描述。
在您的代码中,a
是一个数组类型,具有 int [10]
。您传递 &a
,它是 指向 10 个 int
s 数组的指针类型,或者 int (*)[10]
与指向 int
的指针不同类型,即 int *
。因此编译器尖叫。
由于数组类型变量在作为函数参数传递时衰减为指向数组第一个元素的指针,因此您应该像这样调用您的函数
readarray(a);
关于c - 我所有使用指针的函数的警告消息。应为 'int*' 但参数的类型为 'int (*)[10]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222269/