我的印象是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;
}
再次感谢伊戈尔,非常感谢,一位初出茅庐的程序员非常尊重。和平
答案 0 :(得分:1)
如果指针不是nullptr(0),则将其计算为true。取消引用的值是什么并不重要。
尝试
{{1}}