为什么有指向指针的指针?

采用指向指针的指针操作,一般用于在函数内部来改变采用指针方式传进函数的主函数的指什的指向   
    
  我们想在函数pro()中改变指针p的值(记住:是指针p的值,而不是p所指向的地址的值)。能实现吗?结果是不能,为什么?我们来分析一下  
   
  先看一个例子:  
             
            #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所指向的地址的值)。能实现吗?  
            结果是不能,为什么?我们来分析一下。   
    
                        
            这个例子是改变了字符串指针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);  
            }   
 

补充:

int a = 3, *p;
*p = a ;//error
这个是错误的,原因就是:
p是一个为初始化的一个 随机指针,对一个没有初始化的指针进行*运算,这个是取值运算,这个都是错误的,根本就不能对这样的指针做任何操作,严重的有可能p指向了操作系统的一快内存,对他进行操作,系统都有可能 挂掉的

一般的,这样用
int a= 3,*p;
p=&a; //a是已经分配了内存的一个int变量,对它进行取地址&运算,在给指针p进行初始化,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值