深入理解c++指針的指針和指針的引用
展示一下使用指針的指針和指針的引用修改傳遞給方法的指針,以便更好的使用它。(這里說的指針的指針不是一個(gè)二維數(shù)組)
為什么需要使用它們
當(dāng)我們把一個(gè)指針做為參數(shù)傳一個(gè)方法時(shí),其實(shí)是把指針的復(fù)本傳遞給了方法,也可以說傳遞指針是指針的值傳遞。
如果我們在方法內(nèi)部修改指針會(huì)出現(xiàn)問題,在方法里做修改只是修改的指針的copy而不是指針本身,原來的指針還保留著原來
的值。我們用下邊的代碼說明一下問題:
int m_value = 1;
void func(int *p)
{
  p = &m_value;
}
int main(int argc, char *argv[])
{
  int n = 2;
  int *pn = &n;
  cout << *pn << endl;
  func(pn);
  cout << *pn <<endl;
  return 0;
}
看一下輸出結(jié)果
輸出的是兩個(gè)2
使用指針的指針
展示一下使用指針的指針做為參數(shù)
void func(int **p)
{
  *p = &m_value;
  // 也可以根據(jù)你的需求分配內(nèi)存
  *p = new int;
  **p = 5;
}
int main(int argc, char *argv[])
{
  int n = 2;
  int *pn = &n;
  cout << *pn << endl;
  func(&pn);
  cout << *pn <<endl;
  return 0;
}
我們看一下 func(int **p)這個(gè)方法
•p: 是一個(gè)指針的指針,在這里我們不會(huì)去對它做修改,否則會(huì)丟失這個(gè)指針指向的指針地址
•*p: 是被指向的指針,是一個(gè)地址。如果我們修改它,修改的是被指向的指針的內(nèi)容。換句話說,我們修改的是main()方法里 *pn指針
•**p:兩次解引用是指向main()方法里*pn的內(nèi)容
指針的引用
再看一下指針的引用代碼
int m_value = 1;
void func(int *&p)
{
  p = &m_value;
  // 也可以根據(jù)你的需求分配內(nèi)存
  p = new int;
  *p = 5;
}
int main(int argc, char *argv[])
{
  int n = 2;
  int *pn = &n;
  cout << *pn << endl;
  func(pn);
  cout << *pn <<endl;
  return 0;
}
看一下func(int *&p)方法
•p: 是指針的引用,main()方法里的 *pn
•*p:是main()方法里的pn指向的內(nèi)容。
以上這篇深入理解c++指針的指針和指針的引用就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持我們。
上一篇:使用C語言打造通訊錄管理系統(tǒng)和教學(xué)安排系統(tǒng)的代碼示例
欄 目:C語言
下一篇:C語言設(shè)計(jì)圖書登記系統(tǒng)與停車場管理系統(tǒng)的實(shí)例分享
本文標(biāo)題:深入理解c++指針的指針和指針的引用
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2240.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
 - 01-10深入理解約瑟夫環(huán)的數(shù)學(xué)優(yōu)化方法
 - 01-10深入二叉樹兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)的詳解
 - 01-10深入理解C++中常見的關(guān)鍵字含義
 - 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
 - 01-10深入Main函數(shù)中的參數(shù)argc,argv的使用詳解
 - 01-10深入第K大數(shù)問題以及算法概要的詳解
 - 01-10深入解析最長公共子串
 - 01-10c++中inline的用法分析
 - 01-10深入理解鏈表的各類操作詳解
 


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
 - 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
 - 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
 - 04-02c語言用函數(shù)寫分段 用c語言表示分段
 - 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
 - 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
 - 04-02c語言沒有round函數(shù) round c語言
 - 04-02c語言分段函數(shù)怎么求 用c語言求分段
 - 04-02C語言中怎么打出三角函數(shù) c語言中怎
 - 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
 
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 04-02jquery與jsp,用jquery
 - 01-10delphi制作wav文件的方法
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 


