地址与内存关系

计算机的内存看作是一排很长很长的房子,每个房子都可以放数据,通过一个房号来标识。这个比喻颇为有用,也存在局阻性。计算机的内存由数以亿万计的位(bit)组成,每个位可以容纳值0或1.由于一个位所能表示的值的范出太有限,所单独的位用处不大,通常许多位合成一组作为一个单位(比如最小8位,char类型),这样就可以存储范围较大的值。画个图来描述机器中的内存位置。

用指针求数组中间位置

两个指针一个指向数组的头部,另一个指向数组的尾部。求数组中间位置?

这个用指针的算术运算就可以完成,用尾部指针减去头部指针,再除以2就可以。不过有一点要注意数组要是奇数才有中间位置,例如:1 2 3 4 5 6 7 中间是4。

判断奇数可以用求余 %方式

避免:其返回值是指向成员的非const指针或引用,但成员的访问级比这个函数要低

使一个成员为private或protected的原因是想限制对它的访问,对吗?劳累的编译器要费九牛二虎之力来确保你设置的访问限制不被破坏,对不对?所以,写个函数来让用户随意地访问受限的成员没多大意义,对不对?如果你确实认为有意义,那么请反复阅读本段,直到你不这样认为为止。

指针的指针做输入参数代替二维数组

指针的指针做输入参数代替二维数组?

有时在写程序是会碰到定义函数输入参数要一个二维数组,但并不能确定数组内的元素个数时,这种情况可以用指针的指针做输入参数解决问题。

因为不用指针的指针,二维数组做对也只能有一维定义时不给出元素个数 (int a[][3])。

指针的指针做输入参数好处就是,不用在定义时就要知道组内元素个数,可以在调用时输入,这们定义的函数更通用。

为何 C++ 里有些东西是未定义的

因为机器的不同以及 C 里面也有很多未定义的东西。ISO C++ 标准里有以下术语的详细定义:“未定义”、“未指明(unspecified)”、“由实现定义”,以及“合乎语法的(well-formed)”。注意,这些术语的含义和 ISO C 标准里的定义不太相同,而且也和它们常见的用法不同。假若没有察觉到不同的人对这些术语的认识会有所偏差,讨论问题的时候常常会极度混乱。

应该使用 NULL 还是 0

C++ 里,NULL 的定义就是 0,所以到底使用哪个只是个审美问题。我个人倾向于避免使用宏,所以我使用 0。还有个问题是,有些人误以为 NULL 和 0 并不相同,并且/或者以为 NULL 不是整数。在标准前的代码里,NULL 有时被定义成不恰当的东西,因此不得不避免使用它。不过现今这已不常见。如果你必须给空指针起个名字,那就叫它 nullptr;C++0x 中将会这么叫。届时,“nullptr”将会是个关键字。