如何在以下程序中将调用者的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
答案 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;
}
}