回复 18楼 hanxiaokun
在普通编译下会出现所谓的从数组第一个元素开始输出的假象。假象的成因是 copy_ptr 的参数中,source 指针要比 target 大40个字节。
这样,经过复制操作后,source 和 target 都会增大 3 * sizeof(double) = 3 * 8 = 24个字节量。
这个时候 target 会比刚开始时候的 source 指针小 40 - 24 = 16 个字节量了,16个字节量真好是两个 double 变量的大小。
主函数中调用 copy_ptr 的参数是 source[2] 和 target ,source[2] 是数组 *source* (为了与 copy_ptr 的参数 source 区别,做了修饰)的第三个元素的地址,数组 *source* 的排布是连续排布的,那么第一个元素也就是 source[0] 就会比 source[3] 小两个 double 字节量,正好就是 16 个字节!!! 所以经过复制操作后的 target (copy_ptr 中的形参)指向的正好是 数组 *source* 的第一个元素的位置, 就是 1.1 ,这个时候你再以此打印 target 开始的三个 double ,正好就是 1.1 2.2 和 3.3 了。
但是在开启了编译器优化的情况下,由于两个变量内存地址变化的原因,上述情况不能重现。
C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。