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 *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;
}
但是执行完