if()语句使用的条件的目的是什么? C ++

时间:2015-12-23 21:43:17

标签: c++

如何在以下程序中将调用者的NULL指针(作为三个参数中的任何一个)发送到CalcArea函数?无论我如何修改if()语句的条件(不是内容),我仍然可以看到cout<<的输出“我为什么看到这个...”<

 #include <iostream>
 using namespace std;

 void CalcArea(const double* const pPi,
               const double* const pRadius,
               double* const pArea)
 {
     if (pPi && pRadius && pArea)
     *pArea = (*pPi) * (*pRadius) * (*pRadius);
     cout<< "why am I seeing this?..." <<endl;
 }

 int main()
 {
     const double Pi = 3.1416;

     cout<< "enter radius of circle: ";
     double Radius = 0;
     cin>> Radius;

     double Area = 0;
     CalcArea (&Pi, &Radius, &Area);

     cout<< "area is = " <<Area<<endl;

     cout<< "press enter to continue..." <<endl;
     cin.ignore(10, '\n');
     cin.get();

     return 0;
 }

请帮我理解。它在我的书中说“你不希望函数计算区域,如果调用者无意中发送一个NULL指针作为三个参数中的任何一个”,但在什么条件下确实会发生这种情况? if()语句的条件是什么?记住我只是开始。真诚地感谢大家,newmanadam

3 个答案:

答案 0 :(得分:3)

只有紧跟 if 之后的行取决于评估。

if (condition)
    statement

如果您希望两条线仅在条件成立时运行,请使用花括号。

if (condition)
{
    multiple
    statements
}

这里的if条件只是检查你给它的引用都不是null。如果您使用NULL显式调用函数

,则会发生这种情况
CalcArea(&Pi, NULL, &Area);

或者,如果您使用的指针先前已设置为null。既然你正在从一本书中学习,我会认为它会尽快向你解释。

答案 1 :(得分:1)

if()适用于一个声明,在您的情况下适用于一行:

 if (pPi && pRadius && pArea)
     *pArea = (*pPi) * (*pRadius) * (*pRadius);
 cout << "why am I seeing this?..." <<endl; // cout is outside of if()

您需要创建代码块以使cout输出有条件:

 if (pPi && pRadius && pArea) {
     *pArea = (*pPi) * (*pRadius) * (*pRadius);
     cout << "why am I seeing this?..." <<endl;
 }

条件本身用于检查三个指针中没有一个等于nullptr,因为取消引用这样的指针会导致未定义的行为,简单来说就是为了防止程序粉碎此函数的无效输入。

答案 2 :(得分:0)

你想要支撑整个区块,这个区块引用了这个条件:

void CalcArea(const double* const pPi, 
 const double* const pRadius, 
 double* const pArea)
 {
    if (pPi && pRadius && pArea)
    {
         *pArea = (*pPi) * (*pRadius) * (*pRadius);
         cout << "why am I seeing this?..." <<endl;
         cout << "Because all pointers are != NULL" <<endl;
    }
 }