(const)指針做爲參數的詳細說明

今天封裝本身的類型的轉換的時候發現,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函數blog

void Swap(int * pia, int * pib)
{
int temp(*pia);
*pia = *pib;
*pib = *temp;
}

 是能夠交換成功的,可是實際上注意:::!!!!內存

進入被調pia和pib也是局部變量,只是解引用以後局部臨時變量的值和主函數變量裏值同樣,指向同一塊內存,實現了對那塊內存的修改string

而若是是直接改變指針的值,實際上只是改變了局部變量的值,主函數的指針變量指向的地址值不變,所以如下的修改不能實現交換io

void Swap(int * pia, int * pib)
{
int temp(pia);
pia = pib;
pib = temp;
}

  

而加了const 以後的指針,如const int* 表明指針指向的值不能修改,所以只能改變局部指針變量的值(指向新地址),可是主函數(調用函數)的變量值沒變,仍是指向原地址(固然原地址的有const修飾,更加不可能改變)class

相關文章
相關標籤/搜索