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

what is purpose of condition used for if() statement? C++

本文关键字:是什么 C++ 条件 语句 if      更新时间:2023-10-16

在下面的程序中,如何将NULL指针从调用方作为三个参数中的任何一个发送到CalcArea函数?无论我如何修改if()语句的条件(而不是内容),我仍然可以看到来自cout<lt;"我为什么看到这个…"<

 #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

如果,则仅后面的行取决于评估。

if (condition)
    statement

如果希望两行都只在条件成立时运行,请使用大括号。

if (condition)
{
    multiple
    statements
}

这里的if条件只是检查您给它的引用是否为null。如果使用NULL 显式调用函数,就会发生这种情况

CalcArea(&Pi, NULL, &Area);

或者,如果您正在使用一个指针,该指针以前已设置为null。既然你是从一本书中学习,我想它很快就会向你解释。

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,因为取消引用这样的指针会导致未定义的行为,简而言之,就是为了防止程序压缩该函数的无效输入。

您想要对整个块加括号,这引用了条件:

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;
    }
 }