我的C ++程序工作,即使我仔细修改它。但是怎么样?

时间:2015-12-22 01:04:16

标签: c++11

我的印象是C ++逻辑AND运算符&&以短路方式从左到右进行评估。但是,在下面的程序中,我理解除了if语句中的条件之外的所有内容,在大多数条件下,由于我已经编译并运行程序,因此很明显地评估为真。如果我取出整个if()语句减去当然的原始内容,它甚至可以工作。完成此操作后,它也会产生完全相同的结果。对于我可能较小的大脑,或者可能缺乏经验的大脑,似乎常量指针pArea在通过双区域后会导致if条件评估为false,因为双区域被初始化为零值BEFORE CalcArea函数预先计算其计算结果。请告诉我我的想法出了什么问题,或者缺少伊戈尔,这次这不是书中的错字,程序汇编 并运行。衷心感谢你,我爱C ++。还请向我解释如何为您在本网站上投票,或要求您获得一些奖励。程序如下:

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

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

再次感谢伊戈尔,非常感谢,一位初出茅庐的程序员非常尊重。和平

1 个答案:

答案 0 :(得分:1)

如果指针不是nullptr(0),则将其计算为true。取消引用的值是什么并不重要。

尝试

{{1}}