问题原型:
函数声明如下:
bool read_proInfo(char*&PDATA, char*AC_str, char*DE_str, char*SQ_str, int&AC_len, int &DE_len, int&SQ_len)
PDATA指向一段字符的开始位置,read_proInfo函数每次解析一条数据,解析完之后,希望PDATA能够指向下一条数据的开始位置,方法就是在函数的结尾让PDATA指向下一条数据的位置。如果传递参数的形式是char*PDATA,则函数结束后,PDATA指向的内容不会改变,而如果传递char*&PDATA,函数结束后,PDATA则可以指向下一条数据的位置。
问题产生
我们知道,参数的传递分为按值传递和按地址传递。按值传递传递的是参数的拷贝,不会改变传入参数的值,但是按地址传递是可以改变的。我们也知道,传递数组的名称和传递指针都是按地址传递的。那么,char*PDATA是按地址传递的,为什么函数结束后PDATA的值没有被改变呢?
问题解答
知识点的混淆。没有深入的理解自己产生问题char*PDATA是按地址传递的,我们也可以改变PDATA所指向位置的值,但是问题原型中想要改变的是PDATA指向的地址,而非PDATA所指向的地址的值。想要改变PDATA指向的地址,是改变指针的值,所以需要传递指针的引用。
问题总结
注意区分改变“指针指向地址的值”还是“指针指向的地址,即指针本身的值”,前者传递指针的值,即指针指向的地址;后者传递指针的引用 ,即指针的地址。