知识点:
子函数想要改变父函数的值要满足以下两点:
①传指针
②解引用(返回内存地址中保存的值)
交换两个数的值,举例:
①情形一(交换失败)
#include<stdio.h>
int Swap(int *p1,int *p2)
{
int *tmp=p1;
p1=p2;//没有解引用
p2=tmp;
return 0;
}
int main()
{
int a=10,b=20;
Swap(&a,&b);//传指针正确,但是没有解引用
printf("a=%d,b=%d\n",a,b);
}
②情形二(无法编译)
#include<stdio.h>
void Swap(int *p1,int *p2)
{
int *tmp;
*tmp=*p1;//*tmp是一个野指针(悬挂指针)
*p1=*p2;
*p2=*tmp;
}
int main()
{
int a=10,b=20;
Swap(&a,&b);//传指针成功
printf("a=%d,b=%d\n",a,b);
}
③情形三(交换成功)
#include<stdio.h>
int Swap(int *p1,int *p2)
{
int tmp;
tmp=*p1;//解引用成功
*p1=*p2;
*p2=tmp;
return 0;
}
int main()
{
int a=10,b=20;
Swap(&a,&b);//传指针成功
printf("a=%d,b=%d\n",a,b);//交换成功
}
以下为三种情形下的图解!!!
以下为程序崩溃举例~
①未崩溃
#include<stdio.h>
void Fun(int *p)//应该建立一个二级指针**p
{
p=NULL;//二级指针的目的是解引用
}
int main()
{
int a=20;
int *p=&a;
Fun(p);//没有传指针,应该是&p
printf("%d\n",*p);
return 0;
}
Q1:为什么不崩溃?????
Q2:怎么样才能崩溃?????
②想让程序崩溃的做法
#include<stdio.h>
void Fun(int **p)//使用二级指针解引用一级指针
{
*p=NULL;//将一级指针置空
}
int main()
{
int a=20;
int *p=&a;
Fun(&p);//取地址
printf("%d\n",*p);
return 0;
}