标题:值传递的问题有点不明白
只看楼主
神之驱逐
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:136
专家分:436
注 册:2011-11-22
结帖率:87.5%
已结贴  问题点数:20 回复次数:6 
值传递的问题有点不明白
#include<stdio.h>

int main()
{
   
    void swap(int x,int y);        //对swap函数的声明
    int a,b;
    int *pointer_1,*pointer_2;       //定义两个int*型的指针变量
    printf("please enter a and b:");
    scanf("%d%d",&a,&b);               //输入两个整数
    pointer_1=&a;                     //使pointer_1指向a
    pointer_2=&b;                    //使pointer_2指向b
    if(a<b)                 
        swap(pointer_1,pointer_2); //如果a<b,调用 swap 函数
    printf("max=%d,min=%d\n",a,b);    //输出结果
    return 0;
}
void swap(int *p1,int *p2)    //定义swap 函数
{
    int temp;
    temp=*p1;                    //使*p1和*p2互换
    *p1=*p2;
    *p2=temp;
}


值传递,形参的值的改变不会让实参的值改变的。
为什么这里调用swap函数后,主函数a,b的值改变了?
这里是用值传递的吧?

搜索更多相关主题的帖子: include please 
2012-07-20 12:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
这是坛上讲解过很多次的问题,稍为用心翻查一下旧帖,不出5页就能找到。每个新人都这样问一下,谁耐烦总答你呀。

授人以渔,不授人以鱼。
2012-07-20 13:17
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
得分:0 
你用的是指针做参数,指针之指向地址的。所以传递的是地址 不是值  
2012-07-20 13:43
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
得分:0 
你去翻阅一下实参和形参,指针形参的概念吧...

楼上说得很对,我最讨厌的就是跟人讲概念...
书上有的东西,我何必去讲...
只有懒程序员才能写代码...

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2012-07-20 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
其实高中阶段就应该培养出一种习惯,那就是带着问题看书,反复看。不要教材看过一两遍,就丢到一边,埋头做作业、写代码,多动手固然没错,但所谓的动手其实要你多动脑。不重视理论和原理,是无法学得好的,越学,就会越觉得基础就在书本的前半部分,学了专业课,才知道一二年级落下的基础课程有多重要。

授人以渔,不授人以鱼。
2012-07-20 14:29
神之驱逐
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:136
专家分:436
注 册:2011-11-22
得分:0 
不好意思,以后我会注意的了。

我打问题,出现的相关的问题,只有这几个,翻页的换扭在哪?

你在努力,你就在进步!
2012-07-20 15:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:20 
不是说你打问题时系统提示的那些,而是说平时多关注坛上的帖子,都看一看,说不定其中有你所需要的,就算暂时没遇到,也可以知道人家碰到过什么问题、如何解决,记在脑中,起码有个印象,不用把老问题反复拿出来问。这个问题确实是坛上的经典问题,很多帖子都有提到的,几乎所有大牛都解答过,自然不愿意说来说去。

简单来说,就是指针其实也是一个值,与普通的值传递是完全一样的,都是传值,但普通的非指针传值,是把变量的值复制了一份传到函数中,而指针变量储存的不是变量的值,而是变量的地址(也叫指针的值),把这个地址同样复制一份到函数中,这样,在函数使用的就不是变量的副本,而是变量的地址,通过地址能够找到变量,从而修改了变量真身的值。如果单纯传值,没有地址,函数是无法找到变量真身的,所以改不了外部变量。如果在函数内部修改的传入指针的值,那么这个指针所指向的就不是原来传入的参数,此时修改或引用都是无效的(常见的内存崩溃、非法读写操作之类运行时错误,就是这样来的),这就是使用指针的一个危险之处,必须非常小心。

授人以渔,不授人以鱼。
2012-07-20 15:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-373756-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.202037 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved