指针代码

标签 c pointers

所以我尝试编写一个代码:主要输入三个数字,然后将这些数字的指针发送到需要在它们之间交换的函数,直到我们得到我们想要的。我们希望在代码\函数的最后,最大的数字在 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 swap(int* num1, int* num2);将指针作为输入,它已经知道它需要地址。因此,您正在交换指针的地址。

调用 swap 时不要使用地址

swap(num2, num3);

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

关于指针代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36021111/

相关文章:

C 中的检查循环 - scan() 未在第二次运行时运行

c++ - 代码中未初始化的指针

c - 需要帮助将文件内容扫描到指针数组中

c - 如果设置了多个优化标志,clang 会做什么?

c - 当我在代码中没有看到错误时,我无法将示例数据加载到文件中

c++ - std::array :通过智能指针访问元素的成员

c - 通用 HashMap,不需要的输出 (C)

c - 使用函数指针

c - 3by3线程同步: how to avoid overhead

c++ - 外部结构前向声明