【问题标题】:Pass pointer of array to function that sorts numbers将数组指针传递给对数字进行排序的函数
【发布时间】:2016-04-24 04:38:10
【问题描述】:

我是 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;
}

【问题讨论】:

  • 大家一样的错误,忽略scanf()的返回值。
  • 你写scanf(const char *"%d", int *&amp;numbers[i]);打电话给scanf吗?不,就像你不写sort(int *p, int i);来打电话给sort一样。
  • @immibis 想说的是,您在第 12 行对函数 sort() 的调用是错误的。它不应该重新声明变量的类型,直接使用它们,像这样:sort(p,i);
  • 还要注意你的 for 循环里面的 sort 只会打印数组的第一个元素 10 次。您应该将打印语句更改为: printf("%d\n", p[i]);
  • @bruceg 明白了,谢谢。

标签: c arrays function pointers


【解决方案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;
}

【讨论】:

  • 那么为什么不sort(numbers, i) 呢?
  • @WeatherVane 在这种情况下,他将不知道如何正确声明指针。:)
  • 函数sort 只打印相同的数组元素,除非它执行printf("%d\n", *p++);printf("%d\n", p[i]);
  • @Taji 你必须对数组进行排序。您可以编写自己的排序函数或使用标准 C 函数 qsort。
【解决方案2】:

指针是一个变量,它包含在内存中的地址 另一个变量。与符号(&amp;) 运算符表示地址 记忆。

int *p= &amp;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;
}

这个排序功能只是打印值。如果你想要完整的代码去here

【讨论】:

    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多