比较大小
将a,b两个数按从大到小的顺序输出,为啥用第一种指针形式可以实现,第二种形式不能实现呢。。。。#include <stdio.h>
int main()
{
void swap(int *x,int *y);
int a,b;
int *p1,*p2;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
p1=&a;
p2=&b;
swap(p1,p2);
printf("%d,%d\n",a,b);
return 0;
}
void swap(int *x,int *y)
{
int t;
if(*x<*y)
{
t=*x;
*x=*y;
*y=t;
}
}
*******************************************************
*******************************************************
#include <stdio.h>
int main()
{
void swap(int x,int y);
int a,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
swap(a,b);
printf("%d,%d\n",a,b);
return 0;
}
void swap(int x,int y)
{
int t;
if(x<y)
{
t=x;
x=y;
y=t;
}
}
如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它原有内存地址中的值 形参传的是copy的值,指针传的是值。你debug一下就知道他为什么不对了。 Samples、懂么 发表于 2015-3-31 09:34
如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它 ...
那么第二种形式的值传递到调用函数,为什么在交换完后直接释放了呢 kitefall 发表于 2015-3-31 09:41
形参传的是copy的值,指针传的是值。你debug一下就知道他为什么不对了。
#include <stdio.h>
int main()
{
void swap(int *x,int *y);
int a,b;
int *p1,*p2;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
p1=&a;
p2=&b;
if(a<b)
swap(p1,p2);
printf("%d,%d\n",a,b);
return 0;
}
void swap(int *x,int *y)
{
int *t;
t=x;
x=y;
y=t;
}
那么这个又是怎么回事呢。。。 生活灬着 发表于 2015-3-31 09:51
那么这个又是怎么回事呢。。。
由于参数传递采用传值方式, 因swap 函数不会影响到调用它的例程中的
参数 a 和 b 的值。该函数仅仅交换了 a 和 b 的副本的值。
swap(&a, &b);
由于一元运算符&用来取变量的地址,这样&a 就是一个指向变量 a 的指针。swap 函数的所有
参数都声明为指针,并且通过这些指针来间接访问它们指向的操作数。 参数传递是单向的!
你在下面的函数里虽然交换了,a,b的值,但返回时,并没有带回主函数。 我是来混的 谢谢你们的回答。。。 {:1_1:} never giveup 没V刊不多吧你们知道 dfddddddd 函数的调用时采用值传递的方式,被掉函数和函数和主函数的联系只能是:实参传递给形参,和return语句 诶~~你给复制给我个文件我修改之后对你的文件有影响么??
页:
[1]