1.传指针:相当于走到房间门口,知道房间的确切位置。 2.解引用:相当于打开房门,这可以对房间内部进行改造。
只在子函数中交换了a b的值,但对父函数无影响
void Swap_err1(int a,int b)//必须要传指针 { int tmp = a; a = b; b = tmp; //printf("%d,%d\n",a,b);//假象 }交换了p1、p2中保存的地址,但是只影响了地址,对值没影响。 因为主函数中打印 a b 的值时,a b中的值依旧为10 20;只不过是p1 p2中保存的地址发生改变
void Swap_err2(int *p1,int *p2)//传了指针,但是无意义。没有解引用,未跳入父函数中 { int *tmp = p1; p1 = p2; p2 = tmp; }有可能是不存在的地址,或者存在但是你不能访问。
void Swap_err3(int *p1,int *p2) { int *tmp;//野指针,悬挂指针 局部变量,未初始化,随机值 *tmp = *p1; *p1 = *p2; *p2 = *tmp; }tmp保存p1的值 ,即tmp=10; p1保存p2的值, 即p1=20; p2保存tmp的值, 即p2=10; 此时在主函数中,p1与p2地址中保存的数已交换。
void Swap(int *p1,int *p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int a = 10; int b = 20; Swap(&a,&b); printf("%d,%d\n",a,b); return 0; }