子函数修改父函数的值



//子函数要想修改父函数的值,必须要①传指针【例代码1】 ②解引用【例代码2】
//但传指针解引用也不一定能成功修改,因为可能有野指针【例代码3】



/*
//【代码1】 :输出结果为 10,20
//【因为没有传指针,则Swap_err1函数中的ab和main函数中的ab并不相等,所以打印的是main函数中未交换的ab值】
#include <stdio.h>
void Swap_err1(int a,int b)
{
 int tmp;
 tmp = a;
 a = b;
 b = tmp;
}
int main()
{
 int a = 10;
 int b = 20;
 Swap_err1(10,20);
 printf("%d,%d\n",a,b);
 return 0;
}
*/


/*
//【代码2】 :输出结果为 10,20
//有传指针但没有解引用
#include <stdio.h>
void Swap_err2(int *p1,int *p2)
{
 int *tmp = p1;
 p1 = p2;
 p2 = tmp;
}
int main()
{
 int p1 = 10;
 int p2 = 20;
    Swap_err2(&p1,&p2);
    printf("%d,%d\n",p1,p2);
 return 0;
}
*/


/*
//【代码3】 :编译失败
//传指针解引用但有野指针*tmp,野指针则访问不了
#include <stdio.h>
void Swap_err3(int *p1,int *p2)
{
 int *tmp = *p1;
 *p1 = *p2;
 *p2 = *tmp;
}
int main()
{
 int p1 = 10;
 int p2 = 20;
    Swap_err3(&p1,&p2);
    printf("%d,%d\n",p1,p2);
 return 0;
}
*/




//【正确】:输出结果为 20,10
//相当于int *a=&p1;      *a=p1=10
#include <stdio.h>
void Swap(int *p1,int *p2)   //Swap_err2(int *a,int *b)
{
 int tmp = *p1;   //tmp = *a
 *p1 = *p2;       //*a = *b;
 *p2 = tmp;        //*b = tmp;
}
int main()
{
 int p1 = 10;
 int p2 = 20;
    Swap(&p1,&p2);
    printf("%d,%d\n",p1,p2);
 return 0;
}


猜你喜欢

转载自blog.csdn.net/bian1cheng1/article/details/79842149
今日推荐