| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 586 人关注过本帖
标题:看看这两个有什么不同啊。。。
只看楼主 加入收藏
jiaoyin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-3-22
收藏
 问题点数:0 回复次数:10 
看看这两个有什么不同啊。。。
void swap(int *p1,int*p2) {  int *p; p=p1; p1=p2; p2=p;  }   和这样有什么区别
void swap(int *p1,int*p2) {  int p; p=*p1; *p1=*p2; *p2=p; } 第2种就可以实现两数的调换
搜索更多相关主题的帖子: void 
2011-03-22 18:29
天涯天下去
Rank: 2
等 级:论坛游民
帖 子:41
专家分:35
注 册:2010-12-2
收藏
得分:0 
带“*”的是所指变量的值
而不带“*”的是变量的地址的值
也就是说 p1 是一个地址的值
而 *p1 是所指变量所存储的值

学无止境
2011-03-22 18:40
变幻小子
Rank: 6Rank: 6
来 自:广东陆丰
等 级:侠之大者
帖 子:188
专家分:473
注 册:2011-3-4
收藏
得分:0 
{  int *p; p=p1; p1=p2; p2=p;  }
{  int p; p=*p1; *p1=*p2; *p2=p;} 在没有加*前是相同的加就不同了
本人觉得你要多看书

明天的梦
2011-03-22 19:25
newshou
Rank: 2
等 级:论坛游民
帖 子:10
专家分:28
注 册:2010-12-12
收藏
得分:0 
void swap(int *p1,int*p2) {  int *p; p=p1; p1=p2; p2=p;  }   
这里改变的是指针地址,但是,真的改变了吗?换个看法,如下,
void swap(int p1,int p2) {  int p; p=p1; p1=p2; p2=p; }
你认为能改变两个值不?显然不能,所以第一个的指针地址 是没法改变的。那就没法交换。
参考变量和原变量是两个不用的变量。

下面这个可以。改变的是指针地址所指的值。
void swap(int *p1,int*p2) {  int p; p=*p1; *p1=*p2; *p2=p; }
2011-03-22 20:00
飞卡程序员
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-3-7
收藏
得分:0 
首先  void swap(int *p1,int*p2) {  int *p; p=p1; p1=p2; p2=p;  }     这个定义子函数不能完成指针所指向的值的改变,因为仅仅是指针之间交换,这种交换传不回主函数,因为指针变量也是函数参数
而void swap(int *p1,int*p2) {  int p; p=*p1; *p1=*p2; *p2=p; }     这种改变是指针所指向的值发生了改变  ,详情请看谭浩强的《C程序设计》第三版228页
2011-03-22 21:59
xuleiyee001
Rank: 2
等 级:论坛游民
帖 子:44
专家分:17
注 册:2009-4-21
收藏
得分:0 
指针问题哇
2011-03-22 22:21
我是传奇
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:88
专家分:109
注 册:2011-3-21
收藏
得分:0 
学习
2011-03-22 22:35
zanzan1986
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:140
注 册:2011-2-22
收藏
得分:0 
第二个不行 p = *p1; p是取地址,而*p2是取内容。不能瞎搞。
2011-03-23 09:06
玄界宗主
Rank: 2
等 级:论坛游民
帖 子:10
专家分:22
注 册:2011-3-21
收藏
得分:0 
加*的是地址传递没加*的是值传递。
2011-03-23 09:15
chenwei435
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:322
专家分:1611
注 册:2010-11-28
收藏
得分:0 
void swap(int *p1,int *p2)  /*作为参数传递的是值,不是地址,所以你这样写,是改变不了调用函数中p1,p2的值的。只是改变了本函数中p1,p2 的值,对原函数变没有影响因为是传值的方式。*/
{
 int *p; p=p1; p1=p2; p2=p;  
}
*void swap(int *p1,int *p2) /*作为参数传递的是值,不是地址,所以你这样写,传递的是是p1,p2的值,*p1,*p2的地址,所以你还是改变不了调用函数中p1,p2的值,但是通过p1,p2的值,也就是*p1,*p2的地址,改变*p1,*p2,的值。*/
{
  int p; p=*p1; *p1=*p2; *p2=p;
}

[ 本帖最后由 chenwei435 于 2011-3-23 14:57 编辑 ]
2011-03-23 14:56
快速回复:看看这两个有什么不同啊。。。
数据加载中...
 
   



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

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