函数运行时,会新开辟空间才存储参数副本,因而函数中对此副本的改变并不能影响到父函数。而以指针作为函数参数,就相当于给两条平行的、永不相交的路上横向答了一座桥。就是依靠指针的特点来完成的,指针指向别的内存空间,因而,即使函数实现时为指针参数创建了副本,但此副本和远指针指向同一块内存区域,他们两个任何一个对此空间的修改虽不影响另一个指针的值,但会影响到这个值,即地址空间内存储的变量,这就是其中的原理。但要注意如下代码:
这段代码运行后会产生“不能为写的”错误,是对指针这种特性的错误理解造成的。函数内,q=&p[top]已经使参数的副本改变了值,即父函数中的指针指向的不是同一块区域了。所以这样的写法是错误的。正确的实现应该是: