程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺析指向指針的指針其作用

淺析指向指針的指針其作用

編輯:C++入門知識

這篇文章主要是介紹 指向指針的指針 的一種用法 所以這裡不談指針或指向指針的指針他們的基礎   直接上代碼(用途:使用一個函數動態申請內存,並賦值。跳出調用函數後輸出賦值內容) [cpp]  #include <stdio.h>   #include <stdlib.h>      typedef struct Data   {       int    da;   } Data;      void fun(Data *p);      int main()   {       Data    *d;       fun(d);       printf("%d", d->da);       return    0;   }      void fun(Data *p)   {       p = (Data*)malloc(sizeof(Data));       p->da = 2;   }   我建議你直接運行看看結果,你會發現運行出錯,在這裡我建議你先思考再往下看 那麼再看看下面的這段代碼: [cpp]   #include <stdio.h>   #include <stdlib.h>      typedef struct Data   {       int    da;   } Data;      void fun(Data **p);     //這裡改動了      int main()   {       Data    *d;       fun(&d);     //這裡改動了       printf("%d", d->da);       return    0;   }      void fun(Data **p)     //這裡改動了   {       (*p) = (Data*)malloc(sizeof(Data));     //這裡改動了       (*p)->da = 2;     //這裡改動了   }     仔細看就不難發現改動後的代碼使用了指向指針的指針 為什麼直接使用指針會不行呢?www.2cto.com 因為第一段代碼裡 void fun(Data *p) 中參數是按值傳遞。調用函數自動定義一個臨時變量存儲了實參的拷貝,那麼在fun中動態分配的內存,根本就不是在main函數中指針變量d 所指向的,main中指針變量d 從頭到尾都是未定義的。 如何解決這個問題? 用指向指針的指針,把main中指針變量d 的地址傳進去。這樣在fun中分配的內存空間地址就存放在指針變量d 中   說到這裡,指向指針的指針其中的一個作用就不言而喻了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved