C++指针与函数—指针作为参数和返回值

2020-01-06 12:16:04王旭

   }
   cout <<endl;
}

运行结果:
7 data Copied.
The data of array a is:3 4 5 6 3 1 6
The data of array b is:3 4 5 6 3 1 6

根据arrayCopy函数,不难看出传递数组和传递指针是完全相同的。而通过指针的间接引用或数组操作,我们可以在函数内实现对实参的修改。这就是arrayCopy函数能够实现复制功能的原因。

不过,将指针作为函数参数的副作用仍然不容我们忽视。指针和引用虽然都能够修改实参,但是指针却更加危险。因为引用仅限于修改某一个确定的实参,而指针却可以指向内存中的任何一个数据,通过间接引用就能够在一个函数内修改函数外甚至系统中的数据了。这样一来,函数的黑盒特性就被破坏了,系统也因此变得不再安全。对于程序员来说,将指针作为函数参数可能把函数内的问题引到函数外面去,使得调试程序变得非常困难。所以,我们要认识到使用指针的两面性,谨慎对待指针做函数参数。

为了避免指针作为函数参数导致数据被意外修改,我们可以使用const来保护指针指向的数据,如程序8.6.1中的display函数。