C ++:如何在if语句条件中使用指针

时间:2018-01-12 03:02:52

标签: c++ pointers if-statement

我正在编写一个程序,它接受3个用户输入的二次方程值,做一些计算,并返回二次方有多少根。

当我打印*(point)时,它会从函数中为我提供正确的值。

然而,当我在If条件中使用*(point)时,它似乎不像我想要的那样工作 - 我相信*(point)总是一些正数,因此它总是在执行具体如果条件。

用户值:a = 9b = -12c = 4应打印出此二次方有1个根。和值:a = 2b = 16c = 33应该打印出来这个二次方有两个根。但是程序总是打印出来这个二次方有0根。无论是什么输入的值。

这是我的代码:

#include "stdafx.h"
#include <iostream>

using namespace std;

float *quadratic(float a1[]);

int main()
{

    float a1[3] = {};
    float *point;

    cout << "Enter a: ";
    cin >> a1[0];
    cout << "\nEnter b: ";
    cin >> a1[1];
    cout << "\nEnter c: ";
    cin >> a1[2];

    point = quadratic(a1);

    cout << endl << "d = " << *(point) << endl; 

    if (*(point) < 0) {
        cout << "\nThis quadratic has 2 roots.\n";
    }
    else if (*(point) > 0) {
        cout << "\nThis quadratic has 0 roots.\n";
    }
    else { //else if *(point) is equal to 0
        cout << "\nThis quadratic has 1 root.\n";
    }

    return 0;
}

float *quadratic(float a1[]) {

    float d;
    d = (a1[1] * a1[1]) - (4 * a1[0] * a1[2]);

    float xyz[1] = { d };
    return xyz;

}

1 个答案:

答案 0 :(得分:0)

您的函数quadratic返回指向本地数组的指针。函数返回后,该数组不再存在。然后指针是一个悬空指针,一个指向内存中曾经拥有一个对象的位置的指针,但现在它可以容纳任何东西或只是垃圾。

由于quadratic尝试返回的数组总是一个值,因此不需要返回数组。只需返回该值。

你甚至不需要处理多项式系数的数组,因为它们总是三个,但如果数组看起来好于单个abc变量,然后只使用std::array,例如像这样:

#include <iostream>
#include <array>
#include <vector>
using namespace std;

using Float = double;
auto square_of( Float const v ) -> Float { return v*v; }

auto determinant( array<Float, 3> const& a )
    -> Float
{
    return square_of( a[1] ) - 4*a[0]*a[2];
}

auto main()
    -> int
{
    array<Float, 3> a;
    cout << "Enter A: "; cin >> a[0];
    cout << "Enter B: ";  cin >> a[1];
    cout << "Enter C: ";  cin >> a[2];

    Float const d = determinant( a );

    cout << "d = " << d << endl; 
    if( d < 0 )
    {
        cout << "This quadratic has 2 roots." << endl;
    }
    else if( d > 0 )
    {
        cout << "This quadratic has 0 roots." << endl;
    }
    else // d == 0
    {
        cout << "This quadratic has 1 root.";
    }
}

上面的代码等同于我认为代码的意图。

但是,在递交之前,我会查看formula for roots of quadratic equation并测试程序。