8.利用指针实现形参反向传值问题
利用指针类型的形参进行反向传值需要如下几点:
1.外部实参应定义为实体而非指针,因为外部的实参需要利用实体的空间来存储内部向外传递的数据。(外部若一定要使用指针则看9.利用二维指针实现形参反向传值)
2.内部形参获取到的是外部空间的地址,所以内部不能将形参所存储的地址弄丢了,必须一直让形参存储外部空间的地址。
3.反向传值时,是将被传递数据放入到外部实参的空间中的。为获取外部实参的空间,所以需要对形参进行寻址后再传值。
例如:
/*
fun执行时,e自身有个地址————&e。
因为e是指针所以e存储的是一个另外空间的地址,由于函数调用时外部使用了a作为实参,所以e存储的是外部a的地址,*e则是外部a的存储空间
*/
void fun(int* e)
{
int num = 7;
/*
如果下面反向传值的赋值语句写为:
e = #
则是将num的地址赋值给e,而e原本存储的外部a的地址就被覆盖了,所以达不到反向传值的效果。
所以
正确反向传值赋值语句写法为:
*e = num;
这样,e存储的一直是a的地址,*e是a的空间,这句赋值语句就将num中的7拷贝到了外部a的空间中
*/
*e = num;
}
int main()
{
//外部定义为实体,不能定义为指针int* a;定义为实体则a的空间可以用于接收外传的数据
int a