有關指向指針的指針

採用指向指針的指針操作,一般用於在函數內部來改變採用指針方式傳進函數的主函數的指針的指向   
    
  我們想在函數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所指向的地址的值)。能實現嗎?  
            結果是不能,爲什麼?我們來分析一下。  
   
            如果不用函數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);  
            }  
發佈了19 篇原創文章 · 獲贊 6 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章