将数组的指针传递给对数字进行排序的函数

时间:2016-01-18 21:26:19

标签: c arrays function pointers

我是C的新手,无法弄清楚如何将数组的指针传递给函数。该函数应按升序对用户输入数字进行排序。我想我错过了这个功能至关重要的东西。

我能够输入用户值,但这是我能够毫无错误地获得的。

#include <stdio.h>
int sort(int *p, int i); //function declaration
int main()
{
    int numbers[10]; // ten element array
    int i;

    printf("Please enter ten integer values:\n");
    for(i=0; i<10; i++)
        scanf("%d", (&numbers[i]));

    int *p= &numbers; //a pointer that points to the first element of number
    sort(int *p, int i); //function

}

//function sorts in ascending order
int sort (int *p, int i) //function definition
{
    for (i=0; i<10; i++) //loop through entire array
    {
        printf("%d\n", *p);
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

你应该写

int *p= numbers;//a pointer that points to the first element of number
    sort(p, i); //function

传递给函数的数组被隐式转换为指向其第一个元素的指针。

该功能也应该是

//function sorts in ascending order
int sort (int *p, int n) //function definition
{
    for ( int i = 0; i < n; i++) //loop through entire array
    {
        printf("%d\n", *p++);
        // or
        //printf("%d\n", p[i]);
    }

    return 0;
}

答案 1 :(得分:0)

  

指针是一个包含内存中地址的变量   另一个变量。 &符号(&)运算符表示地址   存储器中。

     

int *p= &numbers;此行将保存数组的第一个地址   元件。要打印数组的每个元素,您必须递增   指针printf("%d\n", *p++);以及当您调用函数时   不需要声明它的参数数据类型。在这一行sort(int *p, int i);中,这是一种调用函数的错误方法。直接调用它们,就像这样:sort(p,i);在你的情况下。

#include <stdio.h>
int sort(int *p, int i); //function declaration
int main()
{
    int numbers[10]; // ten element array
    int i;

    printf("Please enter ten integer values:\n");
    for(i=0; i<10; i++)
        scanf("%d", (&numbers[i]));

    int *p= &numbers; //a pointer that points to address of the first element of numbers array
    sort(p, i); //function

}

//function sorts in ascending order
int sort (int *p, int i) //function definition
{
    for (i=0; i<10; i++) //loop through entire array
    {
        printf("%d\n", *p++);
    }
    return 0;
}

此排序功能只是打印值。如果您想要完整的代码Go here