c - 我所有使用指针的函数的警告消息。应为 'int*' 但参数的类型为 'int (*)[10]'

标签 c arrays function-call

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

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

由于数组类型变量在作为函数参数传递时衰减为指向数组第一个元素的指针,因此您应该像这样调用您的函数

 readarray(a);

关于c - 我所有使用指针的函数的警告消息。应为 'int*' 但参数的类型为 'int (*)[10]',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222269/

相关文章:

Python NumPy : replace values in one array with corresponding values in another array

python - 如何在函数 2 中使用函数 1 而不会出现错误?

c - 访问类型的 Ada 数组

c - Hitech C 语法

c - 位数组的问题

c - C语言中socket接收和发送数据的端口

c++ - 多线程代码中缓存友好的数组迭代模式

c - C语言如何读取文件并存入数组?

javascript - 检测是否使用 JavaScript 中正确数量的参数调用函数的最佳方法

c - 结构中零长度数组的目的是什么?