今天封装自己的类型的转换的时候发现,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修饰,更加不可能改变)