if()语句使用条件的目的是什么?C++
what is purpose of condition used for if() statement? C++
在下面的程序中,如何将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;
}
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么