| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 491 人关注过本帖
标题:指针的有关问题
只看楼主 加入收藏
wak4668
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:105
注 册:2012-8-20
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:7 
指针的有关问题
main()
{
 int a,b;
 swa(a,b);
 printf("%d%d",a,b);
 getch();
}
swap(int x,int y)
{
 int z
 if(x>y)
 {
  z=x;
  x=y;
  y=z
 }
}
为什么不能做到a,b的互换,一定要用指针呢?麻烦各位大虾深刻讲解其中道理?
2013-03-17 13:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
很详细的解释以前讲过,而且不止一次,实在不愿意重复了,经典的问题。

授人以渔,不授人以鱼。
2013-03-17 13:57
wak4668
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:105
注 册:2012-8-20
收藏
得分:0 
回复 2楼 TonyDeng
哦,so ga,初来乍到,不是很了解,我瞅瞅能不能找见
2013-03-17 14:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
很难找的,复印模型。再说一次吧。

凡是函数传递参数,不管是指针传参还是普通传参,都是复制传参,亦即把数据复制一份到函数中,比如你上面的代码,进入到函数swa()中的x就是复制调用处的a,这是两个数据,内容一样,所以在函数内部无论怎么修改a的值,都不会影响原来的x。但如果把参数改为指针,虽然仍然是复制,但这次复制的是地址,在函数swa()内部如果使用*x来修改内容,那么由于两份指针都是指向同一个实体a,所以修改*x就等于修改a本身,这时就可以了。

明白了上面所说的,以后遇到传递参数的时候,就要多一个心眼,留意需要传递的参数是不是真的可以复制。不是什么数据都可以随便复制的,不能复制的数据,就要用指针,指针也只在这个时候用,不要滥用,对诸如int这样的基本类型也用指针,那是误导人的教学法。

[ 本帖最后由 TonyDeng 于 2013-3-17 14:13 编辑 ]

授人以渔,不授人以鱼。
2013-03-17 14:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
传递参数,除了值传递和指针传递,还有一种是引用传递,此时函数中的x就是调用处的a,两者是同一个实体,仅仅是名字不同,这种方式,在函数中不需要用*,直接修改x就等于修改a。引用比指针更清晰更方便,没有那么多令人眼花缭乱的奇怪符号,能用就尽量使用,不要总抓住指针不放(学习者总不会靠C做主打语言,很多语言都没有指针的概念,但引用是必定有的),理解实质才是最重要的。

[ 本帖最后由 TonyDeng 于 2013-3-17 14:30 编辑 ]

授人以渔,不授人以鱼。
2013-03-17 14:27
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
书上可能会有这个代码 但是作为错误代码的例子讲的 具体为啥书上也说过
2013-03-17 14:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
传指针的版本:
程序代码:
调用处
swap(&a, &b);        // 用&取址符提取变量的地址作为参数

函数处
void swap(type_name* x, type_name* y)        // 用*表明传入的是指向类型名称为type_name类型的指针
{
    *x = value;        // 用*给x地址处的数据赋值
}


传引用的版本:
程序代码:
调用处
swap(a, b);

函数处
void swap(type_name& x, type_name& y)        // 用&表明传入的是类型名称为type_name类型的引用对象
{
    x = value;        // 数据赋值,此处x就是调用处的a
}


授人以渔,不授人以鱼。
2013-03-17 14:41
wak4668
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:105
注 册:2012-8-20
收藏
得分:0 
回复 6楼 zklhp
#include <stdio.h>
void main()
{
 int i,n;
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  printf("I'm very grateful for you.\n");
 }
 getch();
}
附:n=10000

2013-03-19 21:01
快速回复:指针的有关问题
数据加载中...
 
   



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

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