天天看點

指針常量、常量指針;指針數組、數組指針;指針函數、函數指針指針常量、常量指針;指針數組、數組指針;指針函數、函數指針

指針常量、常量指針;指針數組、數組指針;指針函數、函數指針

面試中經常被問到一些C++的基礎概念,這些概念很基礎,但是時間長了就會搞混,這裡對其做一個總結。

以上六個名詞,主體均是最後的定語

什麼意思呢,就是說這些名詞都隻要看最後那兩個字就可以了。以下進行舉例:

  • 指針常量:本質是一個常量, 表示指針所指的對象值不能變,指針可以改變。聲明為const int *ptr = &pi.
  • 常量指針:本質是一個指針,表示指針本身(位址)不能改變,但是值可以改變。聲明為int *const ptr = &pi.
  • 指針數組:本質是一個數組,數組的元素是指針。聲明為int *ptr[].
  • 數組指針:本質是一個指針,指向數組。聲明為int(*ptr)[].
    • float (**def)[10],def是一個二級指針,指向的是一個一維數組的指針,數組元素都是float。
    • double*(*gh)[10],gh是一個指針,指向一個一維數組,元素都是double*。
  • 指針函數:本質是一個函數,函數傳回值是指針。聲明為bool *pf(const string &, const string &).
  • 函數指針:本質是一個指針,指向函數。聲明為bool (*pf) (const string &, const string &).
    • double (*f[10]) (),從内向外,f是一個數組,元素都是函數指針,

      ​ 指向的函數類型沒有參數并且傳回值為double。

    • int (*(*F)(int, int)) (int),從内向外,F是一個函數指針,指向的函數類型有兩個int參數,

      ​ 并且傳回一個函數指針的函數,

      ​ 傳回的函數指針指向一個int參數且傳回int的函數。

繼續閱讀