此时实参向形参传递的不是变量 i 和 j 的数据,而是变量 i 和 j 的地址。其实传递指针也是拷贝传递,只不过它拷贝的不是内存单元中的内容,而是内存单元的地址,这就是天壤之别了。拷贝地址就可以直接对地址所指向的内存单元进行操作,即此时被调函数就可以直接对变量 i 和 j 进行操作了。有人会说:“被调函数用完就释放了,不就把 i 和 j 都释放了吗?”不是的,当函数调用完之后,释放的是 p 和 q,不是 i 和 j。p 和 q 中存放的是 i 和 j 的地址。所以 p 和 q 被释放之后并不会影响 i 和 j 中的值。前面讲过,修改指针变量的值不会影响所指向变量中的数据。只不过它们之间的指向关系没有了而已。
此外需要注意的是,形参中变量名分别为 p 和 q,变量类型都是 int* 型。所以实参 i 和 j 的地址 &i 和 &j 是分别传递给 p 和 q,而不是传递给 *p 和 *q。