Pointer Reference
这里为什么在increment()内i的地址已经加四个字节而main()中的i却没有变
i的值是有pass-by-pointer传递的也就是说increment()内对i的改变将会显示到increment()外的i,那为什么这个例子中increment()内对i的改变没有显示到increment()外的i?为什么用引用(&)就可以实现那?
#include <iostream>
using namespace std;
void increment(int* i) { i++; }
int main() {
int* i = 0;
cout << "i = " << i << endl;
increment(i);
cout << "i = " << i << endl;
} ///:~
问题点数:0、回复次数:3Top
1 楼liuleilover(Vietor)回复于 2003-12-02 08:57:09 得分 0
void increment(int* i) { i++; }
没有改变i的值,要注意对于指针变量来说是“按值传递”的。
可以改为
void increment(int** i) { *i++; }
int main() {
int* i = 0;
cout << "i = " << i << endl;
increment(&i);
cout << "i = " << i << endl;
}
Top
2 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2003-12-02 09:47:20 得分 0
楼上liuleilover(网犬)的回答是正解。
函数调用中的传指针的情况,实际上是把实参指针的值(注意实指针变量所保存的值),传给形参指针,就是行参的值和实参的值是一样的,实参没有被直接传入到函数中,所以对于指针来说,还是“按值”传递的。
这时候,解决这个问题的办法正好就是指针引用了。Top
3 楼lovezn0424(宁无悔program)回复于 2003-12-02 15:49:13 得分 0
搂住,你还没有明白指针和引用的区别吧。
你那样是改变了指针的值,而没有改变它所指的单元的内容。
而引用相但于是一个别名Top




