d大家帮我

来源:百度知道 编辑:UC知道 时间:2024/05/24 01:22:53
请注意,不能企图通过改变指针形参的值而使指针实参的值改变。

swap(int *p1,int *p2)

{int *p;

p=p1;

p1=p2;

p2=p;

}

main()

{

int a,b;

int *pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=&a;pointer_2=&b;

if(a<b) swap(pointer_1,pointer_2);

printf("\n%d,%d\n",*pointer_1,*pointer_2);

}

看不懂,书上意思是交换不了输出结果是什么,解释以下啊
还是不懂,第二个例子void initBTree(struct BTreeNode* *bt)里面怎么有两个*阿,没见过,不懂
说的很好,很清楚,谢谢你,我懂了,你也不用跳楼了

形参值改变不影响实参的值!!!
可以通过改变指针所指内容的值为主函数中值带来相应改变.
swap(int *p1,int *p2)

{int temp;

temp=*p1;

*p1=*p2;

*p2=temp; }
这样就ok了。这样实际上是改变的a和b的值,即p1,p2所指向的值。
还有一个典型例子是:
void initBTree(struct BTreeNode *bt)
{
bt = NULL;
return;
}
main()
{struct BTreeNode *root;
initBTree(root);
}
这样root的值一样没有改变。道理同刚才讲的。
只有改成:
void initBTree(struct BTreeNode* *bt)//注意这里
{
*bt = NULL;//这里
return;
}
main()
{struct BTreeNode *root;
initBTree(&root);//还有这里
}
这样才能达到初始化root的目的。

!@#$@#$#%@#$.......
改变形参中指针的值不能影响实参中指针的值!
例如
int a,b;
a=1;b=2;
p1=&a(假设a的地址是1000);
p2=&b(设b的地址是1002);
(这样地址1000的所存储的值是1;地址1002存储的值是2;)
swap(int *p1,int *p2)/* 设置形参p1,p2;它们分别指向地址1000和1002*/

{int *p;/*以下交换形参p1,p2的值,即让p1指向1002;p2指向1000*/

p=p1;

p1=p2;

p2=p;

}
但是执行完