判断2的幂
答案:
n > 0 ? (n & (n - 1)) == 0 : false;
位运算技巧:
n = n & (n - 1)
的效果是消除n的最后一个1位。
交换值
不使用零时变量
void swap(int &a, int &b) {
a += b;
b = a - b;
a = a - b;
}
测试人员发现你负责的系统除了问题,需要修复,通过日志已经明确是某个模块的代码有问题,而这些代码不是你写的,里面的逻辑很复杂,也没有任何文档和测试代码,那么你下一步发行动应该是:
结合出问题的场景,开发对应的测试用例,对原有代码进行测试,找出问题点
析构函数可以是虚函数,构造函数不能是虚函数。
不可以在析构函数中调用虚函数。
模版函数在编译时也会产生可执行代码。
函数模版是一组函数的样板,模版函数是函数模版的一个实例。
数组做sizeof的参数不退化,传递给strlen就退化为指针了
sizeof和strlen都是在编译中就能计算出来结果
指针
char const * pointer
表示pointer指向的内存区域的内容不能修改。
已知:int x[] = {1, 2}, *p = x;, 则p变量的类型是:int *p[2](指针数组),能够正确引用该数组的元素x[1]的是:
x[1]= *++*p
一个指向整形数组的指针的定义为:int(*ptr)[].
产生野指针的原因有:
1. 指针变量没有被初始化
2. free或delete之后没有设置为NULL
3. 指针操作超越了变量的作用范围
解决内存碎片问题的内存管理方案是:段式管理。
\0表示空字符,出现在字符串中间不算一个character。
malloc不能直接申请物理内存,malloc可以申请超过机器物理内存大小的内存块
代码生成阶段的主要任务是把中间代码变换成依赖具体机器的目标代码。
下列代码运行正常:
int main(void)
{
http://www.taobao.com
cout << "Welcome to taobao" << endl;
}
。。。
编译程序的前3个阶段完成的工作是
词法分析、语法分析、语义分析和中间代码生成
pid = fork(); pid不可能 = 0。