中国档案报:C语言问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/03 10:19:22
swap(int *p1,int *p2)
{int *temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
}
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("\na=%d,b=%d\n",a,b);
}
为什么运行结果a=9,b=9
"形参值改变无法传给实参"是什么意思

我觉得你应该看一下 函数的调用与传递关系
看它是地址还是数值
还有指针的交换 只是交换了地址 没有交换这个地址所存的能容 我觉得是这样的
而如果是变量的话交换的是内容跟地址没关系

1.
在swap中.
swap(int *p1,int *p2)
{int *temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
}
你传递的是 各个指针的值 ,而不是指针.
上面代码相当于是:
void swap(int s1 , int s2)
{
int temp;
temp = s1;
s1 = s2;
s2 = temp;
}

而要改则是:
swap(int *p1,int *p2)
{int *temp;
temp=p1;
p1=p2;
p2=temp;
}
即 交换指针

2.
"形参值改变无法传给实参"
就是说,在传值调用的情况下,修改形参并不会改变实参的值.举例:
void add1(int ia)
{
ia++;//形参加一
}

//调用
int ib;
add1(ib);//这个时候.ib是实际上的参数.
//这样子,ib并没有改变

C函数调用中,形参永远不会改变实参,即在函数内修改参数的值后,实际参数的值不会改变。
当用传址调用时,实参实际也没有改变,因为传递的是指针,而指针的值(即指向的地址)在函数结束后不会改变,指针还是指向原来的地址,但是可以改变该地址内存放的值。

#include<stdio.h>
void swap(int *p1, int *p2)
{
int *temp;
temp = p1;
p1 = p2;
p2 = temp;
printf("%d\n%d\n", *p1, *p2);
}
void main(void)
{
int a;
int b;
printf("a=");
scanf("%d", &a);
printf("b=");
scanf("%d", &b);
swap(&a, &b);
}