【发布时间】: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