URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 31 » 指向指针的指针实例
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
指向指针的指针实例
指向指针的指针实例 - pengweipidan [2005-06-24 15:35 | 1,966 byte(s)]
 
Re: 指向指针的指针实例 - bbwolf [2005-06-26 10:51 | 134 byte(s)]
 
Re: 指向指针的指针实例 - z_york [2005-06-27 18:02 | 159 byte(s)]
 
Re: 指向指针的指针实例 - chong2 [2005-06-28 12:58 | 28 byte(s)]
 
Re: 指向指针的指针实例 - beatit [2005-06-25 00:38 | 96 byte(s)]
 
Subject: 指向指针的指针实例
Author: pengweipidan    Posted: 2005-06-24 15:35    Length: 1,966 byte(s)
[Original] [Print] [Top]
先看一个例子:

#include <stdio.h>
char buf[10] = "hello";

void pro(char *out)
{
out = buf;
}

main()
{
char *p = NULL;

pro(p);
printf("%s ", p);
}

我们想在函数pro()中改变指针p的值(记住:是指针p的值,而不是p所指向的地址的值)。能实现吗?
结果是不能,为什么?我们来分析一下。

如果不用函数pro(),我们可以直接在主函数中用 p = buf 来实现。如果使用函数pro(),就变得稍微复杂了。
因为我们要在函数pro()中改变指针p的值,而函数pro()又没有返回值,如何记住这个改变呢?
我们可以先用简单的例子说明:

#include <stdio.h>

void pro(char *out)
{
out[1] = 'o';
}

main()
{
char *p = "hello";
pro(p);
printf("%s ", p);
}

这个例子是改变了字符串指针p所指向的字符串的指,它能记住这个改变是因为在函数中是对指针所指向的地址
空间进行操作。你明白了吗?也就是说,函数的参数是char *out,我们可以改变 *out,但改变不了out本身。
所以针对第一个例子,我们要想改变p,必须把&p当作参数传给函数pro()。修改后的例子如下:

 
#include <stdio.h>
char buf[10] = "hello";

void pro(char **out)
{
*out = buf;
}

main()
{
char *p = NULL;

pro(&p);
printf("%s ", p);
}
----
对爱情要象对烹饪一样100%的投入
[Original] [Print] [Top]
Subject: Re: 指向指针的指针实例
Author: beatit    Posted: 2005-06-25 00:38    Length: 96 byte(s)
[Original] [Print] [Top]
too complicated.
are you trying to explain what is so called "call by value"?
[Original] [Print] [Top]
Subject: Re: 指向指针的指针实例
Author: bbwolf    Posted: 2005-06-26 10:51    Length: 134 byte(s)
[Original] [Print] [Top]
倒!搞得这么复杂???
void pro(char *out)
函数的参数永远是传值,所以即便在函数里面改了char *out,也不会影响外面的。
[Original] [Print] [Top]
Subject: Re: 指向指针的指针实例
Author: z_york    Posted: 2005-06-27 18:02    Length: 159 byte(s)
[Original] [Print] [Top]
就是。

这本来就是C语言的基础问题,你弄不懂,应该找书来看,弄懂了,也无必要发帖告诉大家,我们都懂,这个问题不是问题,没有讨论价值。
----
I love David Beckham and Man.Utd. for ever.
[Original] [Print] [Top]
Subject: Re: 指向指针的指针实例
Author: chong2    Posted: 2005-06-28 12:58    Length: 28 byte(s)
[Original] [Print] [Top]
哈哈……不要打击楼主的积极性
[Original] [Print] [Top]
« Previous thread
问一个gcc3和gcc2.96的问题
C/C++编程版
31
Next thread »
请教一个system()返回值的问题
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:50, cost 0.038733005523682 ms.