c - 我只能调用一个函数一次来使用指针比较两个数字

标签 c pointers function-pointers

我必须使用指针比较 2 个数字,但我只能调用一次函数来获取数字,然后我必须从 2 个数字中找到最大的数字。然后我必须显示哪个数字最大。我有一个很难,因为我不知道我哪里错了,因为当我第一次输入较大的数字时,它总是说第二个数字更大。有人可以帮忙吗?这是我尝试过的。

#include <stdio.h>


        void getnumbers(float*,float*);
        float findlargest(float*,float*);
        void displaylargest(float);  

            int main ()
        {
              float num;
              float num2;
              float largest;

              getnumbers(&num,&num2);

              largest=findlargest(&num,&num2);
              displaylargest(largest);  

return 0;
}

          void getnumbers(float*num,float*num2)
        {

               printf("Enter a number\n");
               scanf("%f",num);

               printf("Enter a number\n");
               scanf("%f",num2);


            }

             float findlargest(float*numptr,float*num2ptr)
         {


            if (*numptr>*num2ptr) {
               return *numptr;
} 
else {
    return *num2ptr;
}
 }

 void displaylargest(float largest)
{
   printf("\nthe largest is %f ",largest);

 }

最佳答案

让我们从getNumbers()开始:
要使函数返回多个值,可以通过引用传递参数。 This post对通过引用传递参数有很好的解释。

When we pass-by-value we are passing a copy of the variable to a function. When we pass-by-reference we are passing an alias of the variable to a function.

其中别名是指向 main() 中声明的 numnum2 内存位置的指针(请参见下面的函数)。这允许您在变量传递到的函数内更改它们的值。

void getnumbers(float *num, float *num2)//pass by ref to get two numbers
{
    printf("Enter a number\n");
    scanf("%f",num);//"%2f" is not something you would do

    printf("Enter a number\n");
    scanf("%f",num2);//assign to num2, not num
}

现在 findLargest() 确实不需要将指针作为参数,但如果赋值需要,则可以。仅当您打算更改它们的值时,您才会这样做。如果您只需要使用该值,则只需按值传递即可:

//much more concise and does the exact same thing!
//Normally wouldn't use pointers here, but it is a requirement for the assignment
float findlargest(float *num, float *num2)
{
    return *num > *num2 ? *num : *num2;
}

现在你的 main 变成:

int main ()
{
    float num = 0;//always a good idea to initialize variables!
    float num2 = 0;
    float largest = 0;

    getnumbers(&num, &num2);//pass by reference

    largest = findlargest(&num, &num2);//pass by value

    displaylargest(largest);  

    return 0;
}

关于c - 我只能调用一个函数一次来使用指针比较两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46986386/

相关文章:

c++ - 如何在 OpenGL 中检测鼠标悬停在某个对象上?

在嵌入式设备上转换指针

c - 如何在 C 中将变量参数默认设置为空?

c - 使用 C 中的函数将字符串数组设置为另一个

c - 小端和大端中 int 的地址是否相同?

c - 如何使用函数指针访问多个文件中的函数

c - 如何为接受函数指针的函数提供参数

java - JNI : From C code to Java and JNI

c++ - 内存布局 : 2D N*M data as pointer to N*M buffer or as array of N pointers to arrays

c++ - 函数 typedefs 中的 noexcept 说明符