【问题标题】:Sort three pointers without using selection sort不使用选择排序对三个指针进行排序
【发布时间】:2014-10-25 21:29:10
【问题描述】:

我是 C 新手,在理解如何在我的代码中使用指针时遇到了很多麻烦。我需要使用单独的排序函数按升序对三个用户输入整数的地址进行排序。但是,我不能包含任何类型的选择排序或通用排序。

编辑:当我运行程序时,出于某种原因,它会按降序给我地址。我需要解决这个问题。

到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void sortThree(int * a, int * b, int * c);

int main(void)
{
    int x, y, z;
    printf("Please enter three variables: ");
    scanf("%i %i %i",&x,&y,&z);

    void sortThree(int * x, int * y, int * z); 
    printf("%u %u %u",&x, &y, &z);

    return 0;
}

void sortThree(int * a, int * b, int * c)
{
    int min, mid, max;

    if (*a <= *b)
    {
        if (*a <= *c)
        {
            min = *a;
        }
        if (*b <= *c)
        {
            mid = *b;
            max = *c;
        } 
        else
        {
            mid = *c;
            max = *b;
        }
    }
}

我确定这是我忽略的东西,或者是我的大脑没有看到的东西。提前致谢!

【问题讨论】:

  • 那么问题出在哪里? (此外,这不会对地址进行排序,它会尝试对整数本身进行排序。但这也不完整。此外,使用 %u 打印指针是未定义的行为 - 使用 %p 和 [explicit] 强制转换为 @987654324 @ 代替。)
  • 问题是当我运行它时它会按降序输出地址......我会按照你的建议做。而要对地址进行排序,我是否只需用 & 号切换所有指针星号?
  • void sortThree(int * x, int * y, int * z); at inside of main :这是一个声明。这不是实际的函数调用。
  • 你真的要按指针的地址排序吗?而不是 x y z 的值?但x、y、z的地址本身不能改变。
  • 啊,我应该知道的。谢谢。是的,它需要从内存中的最低位置到最高位置进行排序。

标签: c function sorting pointers memory-address


【解决方案1】:

这段代码有很多错误,如果不为你重写,很难评论,我不会。除了上面提到的之外,您还使用printf() 按地址而不是按值显示整数。您不能对地址进行排序,或者您不会费心输入任何值。另外,为什么要在 int 和 unsigned int 之间切换格式说明符?它可能不会导致错误,但它很草率。

在排序函数中,您甚至没有更改任何内容,而是在返回时丢弃了结果。它以降序为您提供地址的原因是因为您甚至没有对它们进行排序,它们是它们被声明并推入堆栈的顺序。您将指针传递给printf(),但告诉它它们是无符号整数。实际变量值被忽略。

【讨论】:

    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2012-05-06
    相关资源
    最近更新 更多