1.if 语句中各种与0比较
#include <stdio.h>
int main()
{
//布尔值
bool flag = 1;
if (flag)
{
//良好风格
}
//整形
int i = 2;
if (2 == i)
{
}
//布尔值
double x = 0;
if (0.0 == x)
{
//不能如此使用,虽然会进来
printf("X=0\n");
}
if ((x>=-0.001) && (x<=0.001))
{
printf("X=0OK\n");
}
//指针
char* p = NULL;
if (NULL == p)
{
printf("NULL POINTER\n");
}
return 1;
}
【建议4-4-1】在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数
【建议4-5-1】建议for语句的循环控制变量的取值采用“半开半闭区间”写法。
示例4-5(a)中的x值属于半开半闭区间“0 =< x < N”,起点到终点的间隔为N,循环次数为N。
示例4-5(b)中的x值属于闭区间“0 =< x <= N-1”,起点到终点的间隔为N-1,循环次数为N。
【规则5-2-1】在C++ 程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。【规则6-1-4】如果输入参数以值传递的方式传递对象,则宜改用“const &”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
【规则6-2-2】函数名字与返回值类型在语义上不可冲突。
违反这条规则的典型代表是C标准库函数getchar。
例如:
char c;
c = getchar();
if (c == EOF)
类的引用传递和值传递
引用和指针的区别
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。
#include <stdio.h>
//值传递
void Func1(int x)
{
x += 10;
return;
}
//指针传递
void Func2(int* x)
{
//有可能指针为空
*x += 10;
return;
}
//引用传递
void Func3(int& x)
{
x += 10;
return;
}
int main()
{
int x = 0;
Func1(x);
printf("x = %d\n",x);//0
x = 0;
Func2(&x);
printf("x = %d\n",x);//10
x = 0;
Func3(x);
printf("x = %d\n",x);//10
//引用传递具有指针传递的效果,形式上类似值传递
return 1;
}