用于排序3个随机数的C程序,void reorder3(int a,int*b,int**C);

用于排序3个随机数的C程序,void reorder3(int a,int*b,int**C);,c,sorting,pointers,random,C,Sorting,Pointers,Random,这个代码正在工作,但它不是我想要的。有人知道如何在没有q排序的情况下使其正确吗?。目的是了解如何使用指针。 这三个数字应该是-3到12之间的随机数。下面的代码与此类似,也是我找到的最接近的代码。任何帮助都将不胜感激。提前谢谢 #include <stdio.h> #include <stdlib.h> //functions int compare(const void *a, const void *b) { const int *ia = a; cons

这个代码正在工作,但它不是我想要的。有人知道如何在没有q排序的情况下使其正确吗?。目的是了解如何使用指针。 这三个数字应该是-3到12之间的随机数。下面的代码与此类似,也是我找到的最接近的代码。任何帮助都将不胜感激。提前谢谢

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

//functions
int compare(const void *a, const void *b)
{
   const int *ia = a;
   const int *ib = b;

   if (*ia < *ib)
      return -1;
   else if (*ia > *ib)
      return +1;

   return 0;
}

//qsort function
void sort3(int *a, int *b, int *c)
{
   int temp[3];

   temp[0] = *a;
   temp[1] = *b;
   temp[2] = *c;

   qsort(temp, 3, sizeof(int), &compare);

   *a = temp[0];
   *b = temp[1];
   *c = temp[2];
}

//random function
int rand_int(int a, int b)
{
return rand()%(b-a+1)+a;
}

int main(void)
{

   //declaration of variables
   int a,b,c;
   int rand_int(int a, int b);
   srand(time(0));  
   a = rand_int(-3,12);
   b = rand_int(-3,12);
   c = rand_int(-3,12);

   printf("%i %i %i\n", a, b, c);
   sort3(&a, &b, &c);
   printf("%i %i %i\n", a, b, c);

   return 0;
}
#包括
#包括
//功能
整数比较(常数无效*a,常数无效*b)
{
常数int*ia=a;
常数int*ib=b;
如果(*ia<*ib)
返回-1;
否则,如果(*ia>*ib)
返回+1;
返回0;
}
//qsort函数
无效排序3(int*a、int*b、int*c)
{
内部温度[3];
温度[0]=*a;
温度[1]=*b;
温度[2]=*c;
qsort(温度、3、尺寸(内部)和比较);
*a=温度[0];
*b=温度[1];
*c=温度[2];
}
//随机函数
整数和整数(整数a,整数b)
{
返回rand()%(b-a+1)+a;
}
内部主(空)
{
//变量声明
INTA、b、c;
int rand_int(int a,int b);
srand(时间(0));
a=随机整数(-3,12);
b=随机整数(-3,12);
c=随机整数(-3,12);
printf(“%i%i%i\n”,a、b、c);
sort3(a&b&c);
printf(“%i%i%i\n”,a、b、c);
返回0;
}

对3个整数进行排序很麻烦。使用if语句

如果目标是真正理解指针,那么指针看起来很吓人,但也没那么糟糕。基本上,它们是一个碰巧是地址的数字。您可以像它们一样操作数字,但是如果您取消引用它们(使用
*
),您可以在那里获得值。不过,这是双向的,因为没有太多东西阻止你去引用一个值——这可能会使你的程序崩溃(或者更可怕的是,可能不会)


只要你记住什么是地址,什么是值,你就可以了。

对3个整数进行排序很麻烦。使用if语句

如果目标是真正理解指针,那么指针看起来很吓人,但也没那么糟糕。基本上,它们是一个碰巧是地址的数字。您可以像它们一样操作数字,但是如果您取消引用它们(使用
*
),您可以在那里获得值。不过,这是双向的,因为没有太多东西阻止你去引用一个值——这可能会使你的程序崩溃(或者更可怕的是,可能不会)


只要记住什么是地址,什么是值,就应该可以。

如果不想使用
qsort()
,就不需要
compare()
函数

您可以像这样重写
sort3()

void compare_and_swap(int *a, int *b) {
    int t;
    if (*a > *b) {
        t = *a;
        *a = *b;
        *b = t;
    }
}

void sort3(int *a, int *b, int *c) {
    compare_and_swap(a, b);
    compare_and_swap(a, c);
    compare_and_swap(b, c);
}

这实际上是一个“

如果不想使用
qsort()
,则不需要
compare()
函数

您可以像这样重写
sort3()

void compare_and_swap(int *a, int *b) {
    int t;
    if (*a > *b) {
        t = *a;
        *a = *b;
        *b = t;
    }
}

void sort3(int *a, int *b, int *c) {
    compare_and_swap(a, b);
    compare_and_swap(a, c);
    compare_and_swap(b, c);
}

这实际上是一个“

void sort3(int*a,int*b,int*c)
来自代码和
来自标题的void reorder3(int a,int*b,int**c)
不匹配…
来自代码和
来自代码的void reorder3(int a,int*b,int**c)
标题中的内容不匹配…例如,如何取消对
int
的引用?你只能撤销指针。谢谢,指针的问题是有时候看起来很清楚,有时候我就是不明白。。。我会尽量记住的@glglgl-您只需要将int转换为void*/其他指针类型。我不建议在正常情况下使用它,但前几天我使用它将值传递到pthread(我知道,但我有一个争用条件)。你只需要非常小心,你知道发生了什么。好吧,然后它说“没有什么能阻止你去引用存储任意值而不是地址的指针”。然后事情就清楚了,我完全同意。但是这些事情必须非常小心,而且只能在非常特殊的情况下进行。例如,如何取消对
int
的引用?你只能撤销指针。谢谢,指针的问题是有时候看起来很清楚,有时候我就是不明白。。。我会尽量记住的@glglgl-您只需要将int转换为void*/其他指针类型。我不建议在正常情况下使用它,但前几天我使用它将值传递到pthread(我知道,但我有一个争用条件)。你只需要非常小心,你知道发生了什么。好吧,然后它说“没有什么能阻止你去引用存储任意值而不是地址的指针”。然后事情就清楚了,我完全同意。但是这些事情必须非常小心,而且只有在非常特殊的情况下才能做。如果你先做
(a,c)
,你可以称之为shell排序:-)如果你先做
(a,c)
,你可以称之为shell排序:-)