精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>C、C++语言基础>>再说指针变量

主题:再说指针变量
发信人: 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]

[关闭][返回]