标题:对指针的理解,期待高手的回答!
只看楼主
潇湘夜雨001
Rank: 2
等 级:论坛游民
帖 子:14
专家分:28
注 册:2017-4-22
结帖率:33.33%
已结贴  问题点数:10 回复次数:8 
对指针的理解,期待高手的回答!
这个是C prime plus这本宝典书中的例子,虽说是运行结果对了,还是没太想明白到底是怎么换的!
#include <stdio.h>
int interchange(int u, int v);

int main(void)
{
    int x=5,y=10;
    printf("Originally x = %d and y = %d.\n",x,y);
    interchange(&x,&y);
    printf("Now x = %d and y = %d.\n",x,y);

    return 0;   
}

int  interchange(int * u, int * v)
{
    int temp;

    temp = *u;
    *u = *v;
    *v = temp;
}
搜索更多相关主题的帖子: include return 
2017-04-23 14:03
sun654321
Rank: 1
来 自:艾欧
等 级:新手上路
帖 子:1
专家分:2
注 册:2017-4-23
得分:2 
    就是x,y值的对换。先将x,y的地址值分别给u,v。然后将*u也就是5付给中间变量temp,再将*v就是10给*u,再将temp给*v,也就是说*u=x,u的值是x的地址, *u = *v;这代表将v的值给u,*u代表y的值,对于y其地址永远不会变,而值域可以变化。
2017-04-23 15:29
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
得分:2 
回复 楼主 潇湘夜雨001
就像:
int a, b, c;
a = b;
b = c;
c = a;
b与C进行交换一样。因为*u、*v都是值。
初学C语言,欢迎指教!

还在学习过程中,欢迎指教!
2017-04-23 15:31
潇湘夜雨001
Rank: 2
等 级:论坛游民
帖 子:14
专家分:28
注 册:2017-4-22
得分:0 
回复 3楼 zmf876870302
能具体说下交换的过程不,就是画个内存空间,然后怎么交换!
2017-04-23 20:14
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
得分:2 
我学编程的时候,到了交换两个变量这一节的时候老师用了一个非常生动的例子。
现在桌子上有两倍饮料,一杯橙汁(a号杯),一杯可乐(b号杯),怎样才能把这两杯饮料互换容器?显然我们需要借用第三个空的容器(temp号杯)。

把橙汁倒进空杯子(temp号杯),把可乐倒进原来装橙汁的杯子(a号杯),把橙汁倒进原来装可乐的杯子(b号杯)

至此,我们实现了交换ab的任务



φ(゜▽゜*)♪
2017-04-23 20:23
peter张
Rank: 2
等 级:论坛游民
威 望:1
帖 子:56
专家分:98
注 册:2017-3-7
得分:2 

int  interchange(int * u, int * v)//括号中的参数是地址。main函数调用时,其实就是把x,y的地址值“复制”一份传入函数中。
{
    int temp;

    temp = *u;//这里U所指地址其实就是x的地址,*u就是取x的值。然后这三句结合起来就将x与y的值进行了交换。
    *u = *v;
    *v = temp;
}

不知道你能理解不。

[此贴子已经被作者于2017-4-23 22:50编辑过]

2017-04-23 22:35
peter张
Rank: 2
等 级:论坛游民
威 望:1
帖 子:56
专家分:98
注 册:2017-3-7
得分:0 

int  interchange(int u, int  v)//参数是int型数值。则main函数调用时,就是把x,y的值“复制”一份传入函数中。由于x,y的值是“复制”的,所以在此函数运行结束后
                                //x,y的值并没有改变。如果你想看到x,y“交换”后的结果,则可以在此函数中写句输出语句。
{
    int temp;

    temp = u;
    u = v;
    v = temp;
}

与上楼结合着理解下。应该可以理解。
2017-04-23 22:41
zmf876870302
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
威 望:3
帖 子:50
专家分:199
注 册:2017-3-26
得分:0 
回复 4楼 潇湘夜雨001
对于:
int a, b, c;
a = b;
b = c;
c = a;
我的理解是:首先先把b的值放入a中,然后再把c的值放入b中,最后再把a的值放入c中(由于之前已把刚开始之前b的值放入a中,现在就相当于把刚开始之前b的值放入c中)。现在就实现b与c的交换。你的交换可以按照这个理解。至于画内存空间。由于学艺不精,现在还不太会。不好意思哦。初学C语言,欢迎指教!

还在学习过程中,欢迎指教!
2017-04-24 08:22
平平小黄
Rank: 2
等 级:论坛游民
帖 子:15
专家分:28
注 册:2016-9-27
得分:2 
说说我的理解吧
main函数你定义了 int类型就是把 x和y就是把x和y放在两个盒子里
interchange函数你定义了 int类型的指针然后把x和y给了它(&是取地址号把盒子在哪里告诉了它并且给了它)现在它可以操作盒子了
于是它进行了如下操作‘它让temp等于了第一个盒子(盒子没有记忆功能),然后让第一个盒子里的东西变成第二个东西,接着让第二个盒子里的东西变成了temp 这样就实现了交换’
如果没有定义指针 只是在另外一个函数里又准备了两个盒子,然后把x和y复制进去,main函数里面放x的盒子和放y的盒子并没有被操作。
指针无非就是对放数据的地方直接下手
2017-04-24 23:32



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




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

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