使用指针的所有函数的警告消息。 期望’int *’但参数的类型为’int(*)’

代码工作正常我只是担心我得到的警告信息,是否有办法让它们不出现? 有什么理由担心他们吗? 在代码中更远的地方,我不太明白我做了什么或为什么它起作用。 它之前没有工作,所以我查看其他人用指针做了什么,它现在有效

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*); ^ 

这是警告信息,我为每个function得到它^^^^^^^^^^^^^^^^^^

我知道为什么它有问题,我想,但我不明白我怎么能改变任何东西

 #include  #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  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  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的数组 ,或者int (*)[10] ,它与int的指针类型不同,即int * 。 因此编译器尖叫。

当数组类型变量作为函数参数传递时,它会衰减到指向数组第一个元素的指针,你应该调用你的函数

  readarray(a);