C 指针代码

C 指针代码,c,pointers,C,Pointers,所以我试着做一个代码:主程序输入三个数字,然后将这些数字的指针发送到需要在它们之间交换的函数,直到得到我们想要的。我们希望在代码\函数的末尾,最大的数字是num1,第二大的数字是num2,最小的数字是num3。请帮我指点一下。该函数打印一些垃圾值 #include <stdio.h> #include <stdlib.h> void whichIsBigger(int* num1, int* num2, int* num3); void swap(int* num1,

所以我试着做一个代码:主程序输入三个数字,然后将这些数字的指针发送到需要在它们之间交换的函数,直到得到我们想要的。我们希望在代码\函数的末尾,最大的数字是num1,第二大的数字是num2,最小的数字是num3。请帮我指点一下。该函数打印一些垃圾值

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

void whichIsBigger(int* num1, int* num2, int* num3);
void swap(int* num1, int* num2);
void printsAnswer(int* num1, int* num2, int* num3);

int main(void)
{
    int num1, num2, num3;
    int* pnum1 = &num1;
    int* pnum2 = &num2;
    int* pnum3 = &num3;
    printf("Please enter three number\n");
    scanf("%d %d %d",&num1,&num2,&num3);
    whichIsBigger(pnum1, pnum2, pnum3);
    system("PAUSE");

    return 0;
}


/*
*/
void whichIsBigger(int* num1, int* num2, int* num3)
{
    if ((*num3 > *num1) && (*num3 > *num2))
    {
        if (*num1 > *num2)
        {
            swap(&num1, &num2);
        }
    }
    else if ((*num2>*num1) && (*num2>*num3))
    {
        swap(&num2, &num3);
        if (*num1 > *num2)
        {
            swap(&num1, &num2);
        }

    }
    else if ((*num1 > *num2) && (*num1 > *num3))
    {
        swap(&num1, &num3);
        if (*num1 > *num2)
        {
            swap(&num1, &num2);
        }

    }

    printsAnswer(&num1, &num2, &num3);

}


/*
*/
void swap(int* num1, int* num2)
{
    int temp = *num1;
    *num1 = *num2;
    *num2 = temp;
}

/*
*/
void printsAnswer(int* num1, int* num2, int* num3)
{
    printf("the biggest number is: %d\n", *num1);
    printf("the second biggest number is: %d\n", *num2);
    printf("the smallest number is: %d\n", *num3);
}
#包括
#包括
void whichIsBigger(int*num1,int*num2,int*num3);
无效掉期(整数*num1,整数*num2);
无效打印电源(int*num1、int*num2、int*num3);
内部主(空)
{
int num1,num2,num3;
int*pnum1=&num1;
int*pnum2=&num2;
int*pnum3=&num3;
printf(“请输入三个数字\n”);
scanf(“%d%d%d”、&num1、&num2、&num3);
呼吸机(pnum1,pnum2,pnum3);
系统(“暂停”);
返回0;
}
/*
*/
void whichIsBigger(int*num1,int*num2,int*num3)
{
如果((*num3>*num1)和(*num3>*num2))
{
如果(*num1>*num2)
{
互换(货币单位1和货币单位2);
}
}
否则如果((*num2>*num1)和(*num2>*num3))
{
互换(货币单位m2和货币单位m3);
如果(*num1>*num2)
{
互换(货币单位1和货币单位2);
}
}
否则如果((*num1>*num2)和(*num1>*num3))
{
互换(货币单位1和货币单位3);
如果(*num1>*num2)
{
互换(货币单位1和货币单位2);
}
}
打印电源(num1、num2和num3);
}
/*
*/
无效掉期(整数*num1,整数*num2)
{
int temp=*num1;
*num1=*num2;
*num2=温度;
}
/*
*/
无效打印电源(int*num1、int*num2、int*num3)
{
printf(“最大的数字是:%d\n”,*num1);
printf(“第二大数字是:%d\n”,*num2);
printf(“最小的数字是:%d\n”,*num3);
}

该函数的外观如下

void whichIsBigger( int *num1, int *num2, int *num3 )
{
    if ( *num1 < *num2 ) swap( num1, num2 );
    if ( *num2 < *num3 ) swap( num2, num3 );
    if ( *num1 < *num2 ) swap( num1, num2 );
}
至于你的函数,除了对
交换的不正确调用之外,它本质上是错误的,因为通常至少有两个数字可以彼此相等。在这种情况下,if语句中的两个条件都不等于true。
例如,当<代码> NUM1<代码>等于<代码> 1 和<代码> NU2和<代码> NUM3等于<代码> 2 < /C> > < /P>
考虑到将函数
printAnswer
的参数声明为指针是没有意义的。该函数的定义如下

void printsAnswer( int num1, int num2, int num3 )
{
    printf( "the biggest number is: %d\n", num1 );
    printf( "the second biggest number is: %d\n", num2 );
    printf( "the smallest number is: %d\n", num3 );
}

该函数可以按以下方式显示

void whichIsBigger( int *num1, int *num2, int *num3 )
{
    if ( *num1 < *num2 ) swap( num1, num2 );
    if ( *num2 < *num3 ) swap( num2, num3 );
    if ( *num1 < *num2 ) swap( num1, num2 );
}
至于你的函数,除了对
交换的不正确调用之外,它本质上是错误的,因为通常至少有两个数字可以彼此相等。在这种情况下,if语句中的两个条件都不等于true。
例如,当<代码> NUM1<代码>等于<代码> 1 和<代码> NU2和<代码> NUM3等于<代码> 2 < /C> > < /P>
考虑到将函数
printAnswer
的参数声明为指针是没有意义的。该函数的定义如下

void printsAnswer( int num1, int num2, int num3 )
{
    printf( "the biggest number is: %d\n", num1 );
    printf( "the second biggest number is: %d\n", num2 );
    printf( "the smallest number is: %d\n", num3 );
}

当您向交换函数发送指针时,您添加了发送地址的“&”。因为无效交换(int*num1,int*num2);将指针作为输入,它已经知道它需要地址。因此,您正在交换指针的地址

呼叫交换时,不要使用地址

swap(num2, num3);

我相信这将修复您的程序。

当您向交换函数发送指针时,您添加了发送地址的“&”。因为无效交换(int*num1,int*num2);将指针作为输入,它已经知道它需要地址。因此,您正在交换指针的地址

呼叫交换时,不要使用地址

swap(num2, num3);

我相信这会修复你的程序。

试着在打开警告的情况下编译它,你会学到一些有价值的东西:)例如
gcc-Wall-your_file.c
主要的问题是你将指针传递给指针而不是指针。为什么你使用swap作为swap(&num1,&num2)而不是swap(num1,num2)?它已经是一个边注上的一个点了,whichIsBigger函数似乎给出了相反的结果(显示最小的数为最大的数等)尝试在打开警告的情况下编译它,您会学到一些有价值的东西:)例如
gcc-Wall your_file.c
主要问题是您将指针传递给指针,而不是指针。为什么您使用swap作为swap(&num1,&num2)而不是swap(num1,num2)?它已经是一个边注上的一个点了,whichIsBigger函数似乎给出了相反的结果(显示最小的数为最大的数等)