简体   繁体   English

将指向数组的指针作为参数传递给 function

[英]Passing pointer to an array as a parameter to a function

I tried to build a heap and finally print the elements in the form of an array.我试图建立一个堆,最后以数组的形式打印元素。

Here it is the code (I know this doesn't really make sense but I just wanted to test my knowlwdge of heap and dynamic arrays):这是代码(我知道这并没有什么意义,但我只是想测试一下我对堆和动态数组的了解):

#include <stdio.h>
#include <stdlib.h>
void heapiify(int *arr,int n, int i)
{
    int largest=i;
    int l=2*i+1;    // left node
    int r= 2*i+2;   // right node
    if(l<=n && *arr[l]>=*arr[i])
        largest=l;
    if (r <=n && *arr[r]<=*arr[i])
        largest= r;
    if(largest !=i)
    {
        int temp=*arr[i];
        *arr[i]=*arr[largest];
        *arr[largest]=temp;
    }
    heapify(*arr,n,largest);
}

void buildh(int *arr,int n,int r,int c)
{
    int i;
    for(i=n/2-1;i>=0;i--)
        heapify(*arr,n,i);
   output(*arr,r,c);
}

void output(int *arr,int r,int c)
{
    int i,j;
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
        {
            printf("%d",*arr[i*c+j]);
        }
        printf("\n");
    }
}

int main()
{
    int i,j,r,c;

    printf("enter the number of rows");
    scanf("%d",&r);
    printf("enter the number of columns");
    scanf("%d",&c);

    int n=r*c;
    int *arr=malloc(n*sizeof(int));
    for(i=0;i<r;i++)
    {
        for(j=0;j<c;j++)
            scanf("%d",&arr[i*c+j]);
    }

    buildh(*arr,n,r,c);
}

I'm getting 9 errors which are all the same我收到了 9 个相同的错误

invalid argument type of unary '*'( have int)

Your arr variable is of type pointer to int :您的arr变量是指向int的类型指针:

int *arr=malloc(n*sizeof(int));

So when you call buildh , which takes the same type, you have to pass it as-is:因此,当您调用具有相同类型的buildh时,您必须按原样传递它:

buildh(arr,n,r,c);

Same for the other cases.其他情况也一样。

The problem is the dereference of arr , across your funtions in multiple places, and the passing of dereferenced *arr in your functions to int * parameters, you should pass arr , try:问题是arr的取消引用,在您的多个地方的函数中,以及在您的函数中将取消引用的*arr传递给int *参数,您应该传递arr ,尝试:

//...
void heapify(int *arr, int n, int i)
{
    int largest = i;
    int l = 2 * i + 1; // left node
    int r = 2 * i + 2; // right node
    if (l <= n && arr[l] >= arr[i])  //here
        largest = l;
    if (r <= n && arr[r] <= arr[i])  //here
        largest = r;
    if (largest != i)
    {
        int temp = arr[i];  //here
        arr[i] = arr[largest]; //here
        arr[largest] = temp; //here
    }
    heapify(arr, n, largest); //here
}
void buildh(int *arr, int n, int r, int c)
{
    int i;
    for (i = n / 2 - 1; i >= 0; i--)
        heapify(arr, n, i);    //here
    output(arr, r, c);         //here
}
void output(int *arr, int r, int c)
{
    int i, j;
    for (i = 0; i < r; i++)
    {
        for (j = 0; j < c; j++)
        {
            printf("%d", arr[i * c + j]); //here
        }
        printf("\n");
    }
}

int main()
{
    //...
    buildh(arr, n, r, c); //here
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM