发信人: chace()
整理人: wenbobo(2002-12-06 22:08:55), 站内信件
|
各位前辈:
请再看一程序(主函数略):swap(p1,p2)
int *p1,*p2;
{int *p;
p=p1;p1=p2;p2=p;
}
这里的指针p也作交换的中间变量.但它并没达到交换的真正目的.为什麽这里的又 不可以?我好乱!
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.71] 发信人: free (龙门之光), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易 BBS (Tue May 18 15:24:48 1999), 转信
【 在 chace (小晴) 的大作中提到: 】 : 各位前辈: : 请再看一程序(主函数略):swap(p1,p2) : int *p1,*p2; : {int *p; : p=p1;p1=p2;p2=p; : }
c中的函数却省都是形参,你在函数体里改变了参数的值 出了函数体是不管用的,你应该在每个变量前面加上* 改变参数所指地址里的值,这样就可以达到交换的目的了
: 这里的指针p也作交换的中间变量.但它并没达到交换的真正目的.为什麽这里的又 : 不可以?我好乱!
-- · 还 删 只 砍 ┃◣ | 有 了 要 文 ┃ 后 我 灌 不 ┃ 小 来 一 水 要 ┃ · 光 文 篇 勤 紧 ┃·
※ 来源:.网易 BBS bbs.netease.com.[FROM: 202.96.191.124] 发信人: crazyjava (骄傲的中国人), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易虚拟社区 (Tue May 18 16:41:33 1999), 站内信件
【 在 chace (小晴) 的大作中提到: 】
: 各位前辈:
: 请再看一程序(主函数略):swap(p1,p2)
: int *p1,*p2;
: {int *p;
: .......
It should be as follows:
void swap( int *p1, int *p2 )
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}
Note:the difference between
1) int *p1; // *p1, p1
and
2) p = *p1; // *p1, p1
-- 孤身走我路...
其实,路,两个人一起走比一个人要好。
email: [email protected]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 139.87.93.236] 发信人: tgm98 (夏雪), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易虚拟社区 (Wed May 19 08:42:40 1999), 站内信件
【 在 chace (小晴) 的大作中提到: 】
: 各位前辈:
: 请再看一程序(主函数略):swap(p1,p2)
: int *p1,*p2;
: {int *p;
: .......
你可以这样写: swap(p1,p2)
int **p1,**p2;
{int *p;
p=*p1;*p1=*p2;*p2=p;
}
调用时,
int *p1,*p2;
p1=new int();
*p1=1;
p2=new int();
*p2=2;
swap(&p1,&p2);
delete p1;
delete p2;
-- 不要对我说生命中辉煌的事,
不要对我说失败是命运的事,
那些在经验里我只相信一次,
因为我和你一样,
要这样走过一生,
我只有低头前进。
※ 修改:.tgm98 于 May 19 10:48:22 修改本文.[FROM: 202.96.190.64] ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.64] 发信人: magicfat (魔法胖子), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易 BBS (Wed May 19 13:33:17 1999), 转信
【 在 chace (小晴) 的大作中提到: 】 : 各位前辈: : 请再看一程序(主函数略):swap(p1,p2) : int *p1,*p2; : {int *p; : p=p1;p1=p2;p2=p; : } : 这里的指针p也作交换的中间变量.但它并没达到交换的真正目的.为什麽这里的又 : 不可以?我好乱!
这是因为p1和p2的值是形参,在函数中的改变都不会被返回给调用者。
一般用C++实现swap,可以使用函数模板:
template<class T> void swap( T& v1, T& v2 ) { T temp; temp = v1; v1 = v2; v2 = temp; }
但要注意如果T被实例化为某个类,调用者需要实现该类的=运算符。
-- ※ 来源:.网易 BBS bbs.netease.com.[FROM: surf325.pompano.net] 发信人: ken_qian (<marquee>杀意隆), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易虚拟社区 (Wed May 19 15:48:51 1999), 站内信件
【 在 magicfat (魔法胖子) 的大作中提到: 】
魔法胖子的作法可能又会让小朋友想上一阵子了,
模板么,先不说也罢了。
wink magicfat
Ken
16:43
-- 杀意隆在你的耳边轻声说:“我要用你的血把月亮染红!”
你的眼前一黑,接着什么也不知道了......
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.175.11.131] 发信人: liangfuri (小梁), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易虚拟社区 (Wed May 19 16:17:57 1999), 站内信件
【 在 chace (小晴) 的大作中提到: 】
: 各位前辈:
: 请再看一程序(主函数略):swap(p1,p2)
: int *p1,*p2;
: {int *p;
: .......
这里定义了三个指针:p1,p2,p,
p1,p2,没有赋值,所以这里的指针p也无法赋值。
可以不可以先把p1,p2,赋值.例p1=&a,p2=&b,
-- 小梁
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.151.146] 发信人: shanhaiguan (小石头), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易虚拟社区 (Thu May 20 09:13:37 1999), 站内信件
【 在 chace (小晴) 的大作中提到: 】
: 各位前辈:
: 请再看一程序(主函数略):swap(p1,p2)
: int *p1,*p2;
: {int *p;
: .......
看来你是新手,只要牢记:指针是直接指向物理内存的,即它就是地址.
这一切就很容易理解了.不过,即便是高手用指针时也要小心,特别是
传递指针参数.
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 159.226.5.152] 发信人: magicfat (魔法胖子), 信区: C 标 题: Re: 再说指针变量! 发信站: 网易 BBS (Fri May 21 08:20:32 1999), 转信
【 在 ken_qian (<marquee>杀意隆) 的大作中提到: 】 : 【 在 magicfat (魔法胖子) 的大作中提到: 】 : 魔法胖子的作法可能又会让小朋友想上一阵子了, : 模板么,先不说也罢了。 : wink magicfat
呵呵,本来也不是回给小朋友一个人的。
※ 来源:.网易 BBS bbs.netease.com.[FROM: 24.129.60.47]
|
|