今天封裝自己的類型的轉換的時候發現,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修飾,更加不可能改變)