生活灬着 发表于 2015-3-31 09:09:56

比较大小

将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;
        }
}


Samples、懂么 发表于 2015-3-31 09:34:38

如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它原有内存地址中的值

kitefall 发表于 2015-3-31 09:41:08

形参传的是copy的值,指针传的是值。你debug一下就知道他为什么不对了。

生活灬着 发表于 2015-3-31 09:42:05

Samples、懂么 发表于 2015-3-31 09:34
如果需要更改内存地址中的内容,就得传指针,像int a这种只是传递内存地址中的内容的一份拷贝,所以不会改变它 ...

那么第二种形式的值传递到调用函数,为什么在交换完后直接释放了呢

生活灬着 发表于 2015-3-31 09:51:00

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;
}
那么这个又是怎么回事呢。。。

ANDES 发表于 2015-3-31 10:19:25

生活灬着 发表于 2015-3-31 09:51
那么这个又是怎么回事呢。。。
由于参数传递采用传值方式, 因swap 函数不会影响到调用它的例程中的
参数 a 和 b 的值。该函数仅仅交换了 a 和 b 的副本的值。
swap(&a, &b);
由于一元运算符&用来取变量的地址,这样&a 就是一个指向变量 a 的指针。swap 函数的所有
参数都声明为指针,并且通过这些指针来间接访问它们指向的操作数。

haiouda 发表于 2015-3-31 10:30:40

参数传递是单向的!

你在下面的函数里虽然交换了,a,b的值,但返回时,并没有带回主函数。

吾王Ein 发表于 2015-3-31 16:38:03

我是来混的

生活灬着 发表于 2015-3-31 19:03:05

谢谢你们的回答。。。

laonamiaoyu 发表于 2015-3-31 19:44:51

{:1_1:} never giveup

laonamiaoyu 发表于 2015-3-31 20:24:44

没V刊不多吧你们知道

laonamiaoyu 发表于 2015-4-1 23:39:38

dfddddddd

yhh2530080997 发表于 2015-4-2 16:58:14

函数的调用时采用值传递的方式,被掉函数和函数和主函数的联系只能是:实参传递给形参,和return语句

牡丹花下死做鬼 发表于 2015-4-5 09:04:56

诶~~你给复制给我个文件我修改之后对你的文件有影响么??
页: [1]
查看完整版本: 比较大小