指向指针的指针

原创 2007年09月26日 17:40:00

先看一个例子:
    
     #include <stdio.h>
     char buf[10] = "hello";

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

     main()
     {
         char *p = NULL;
        
         pro(p);
         printf("%s/n", 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/n", 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/n", p);
     }

 

相关文章推荐

指针指向分析

  • 2016年02月16日 21:04
  • 2.69MB
  • 下载

C/C++指向二维数组的指针

1. 二维数组  设有整型二维数组a[3][4]如下:     0 1 2 3     4 5 6 7     8 9 10 11   它的定义为: ...

指向函数的指针

  • 2016年05月16日 17:31
  • 1.06MB
  • 下载

C语言中指向函数的指针(我见过的讲的最清晰的文章)

转帖自: http://wenku.baidu.com/view/7e566448cf84b9d528ea7a57.html 1 定义和调用程序在编译后,每个函数都有一个首地址(也就是函数第一...
  • gsnet
  • gsnet
  • 2013年02月26日 16:00
  • 1688

指向函数的指针运用

  • 2014年09月02日 15:14
  • 189KB
  • 下载

用指向函数的指针作函数参数2(c语言)

函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量等。还有一种就是指向函数的指针也可以作为参数,以便实现函数地址的传递,也就是将函数名传递给形参。 它的原理:有一个函数(假设函数名为...

为什么父类指针可以指向子类反之则不行?

为什么父类指针可以指向子类反之则不行? 例如: class a {public: int aa}; class b:public a {public: int bb; }从内存的来看 如a ----...

基类的指针指向派生类的对象

说明:只要基类的成员函数是虚函数,派生类的同名函数不管有没有显示声明virtual都是虚函数。 #include "stdafx.h" #include "iostream" using namesp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指向指针的指针
举报原因:
原因补充:

(最多只允许输入30个字)