剑指Offer学习笔记 分类: C/C++ 2015-06-04 11:05 78人阅读 评论(4) 收藏

1、在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。

2、对于str1、str2定义时须分配内存空间,所以地址不同,而str3、str4都指向某一常量区,所以地址是相同的。

char str1[] = "hello world";
char str2[] = "hello world";

char *str3 = hello world";
char *str4 = hello world";
</pre><pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif;">3、合并数组时,考虑从后向前复制,效率可能更高。</span>

4、递归在本质上就是一个栈结构。

5、递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量,而且往栈时压入数据和弹出数据都需要时间。

6、右移时,如果数字是一个无符号数值,则用0填补最左边的n位。如果数字是一个有符号数值,则用数字的符号位填补最左边的n位。

7、把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。

8、位运算的效率比乘除法及求余的效率要高很多,常见的2的倍数的乘除法、奇偶判断等都可能用位运算代替。

9、当用一个指针遍历链表不能解决问题时,可以采用两个或更多指针,并使用两个指针的移动速度不同步。

10、对于函数输入,一定要先判断输入是否合理;其次要检查边界条件,考虑问题的全面性。

11、路径是从根结点出发到叶结点,也就是说路径总是以根结点为起点。

12、正整数的最大值是0x7FFFFFFF,最小的负整数值是0x80000000。

13、写代码之前首先考虑测试用例。

原文地址:https://www.cnblogs.com/zclzqbx/p/4687129.html