PS:为了面试准备的,总结的有点粗糙。
1.使用了未初始化的局部变量
错误:
正确:
2.指针与指向指针的指针
Pointer to an integer value
int* i
Pointer to a pointer to an integer value
int** i
3.i++ 与++i的区别
use ++i if you don't have a specific reason to use i++
对于自定义类型,重载运算符:
Foo& Foo::operator++() // called for ++i
{
this->data += 1;
return *this;
}
Foo Foo::operator++(int ignored_dummy_value) // called for i++
{
Foo tmp(*this); // variable "tmp" cannot be optimized away by the compiler
++(*this);
return tmp;
}
i++多了一个拷贝的动作, If the copy constructor is expensive, then this can have a significant performance impact.
4.C和汇编的区别
C语言可读性好,代码便于维护,便于开发;汇编语言编写的程序不容易看懂,可维护性不好,但是执行效率高。
1)语言效率
汇编语言实质上是机器语言(0,1序列)的助记符
汇编语言与机器语言是一一对应的。但是C语言呢?当然没这么好事了。C语言的语法是固定的,C语言编写的程序要编译成CPU能读懂的机器语言指令,没办法一一对应,所以就需要有编译规则了。
我试验过,用C编写一个简单的程序,比方说只包含一个for循环,编译出的代码和用汇编写的最优代码几乎是一样。但代码量一大,由于受制于规则(不受制也不行呀,否则编不出来),编出来的代码与用汇编语言写出来的代码相比就走了不少“弯路”了。虽然说,现在的很多C编译器在编译的时候都会有优化,但是,不可能做得到效率上等同于与机器语言一一对应的汇编语言的效率。毕竟,汇编语言可以理解为直接就是面对CPU的,只不过是机器语言用助记符代替而矣。