今天封装自己的类型的转换的时候发现,const int* 的返回值一直是空,即实际未生效
int StrToConCh(const string strsource,const char* outCh) { outCh = strsource.c_str(); return 1; }
const char* tempSource = NULL; int ret = otypeConversion.StrToConCh(strsource,tempSource);
改成这样跟代码的时候,发现进入被调函数时值是改变的
想想看swap函数
void Swap(int * pia, int * pib) { int temp(*pia); *pia = *pib; *pib = *temp; }
是可以交换成功的,但是实际上注意:::!!!!
进入被调pia和pib也是局部变量,只是解引用之后局部临时变量的值和主函数变量里值一样,指向同一块内存,实现了对那块内存的修改
而如果是直接改变指针的值,实际上只是改变了局部变量的值,主函数的指针变量指向的地址值不变,因此以下的修改不能实现交换
void Swap(int * pia, int * pib) { int temp(pia); pia = pib; pib = temp; }
而加了const 之后的指针,如const int* 代表指针指向的值不能修改,因此只能改变局部指针变量的值(指向新地址),但是主函数(调用函数)的变量值没变,还是指向原地址(当然原地址的有const修饰,更加不可能改变)