天天看點

《C++必知必會》讀書筆記4

int *f();   //一個傳回值為int* 的函數

int (*f)();  //一個函數指針,指向一個傳回類型為int的并且無參數的函數

const int n=12;

int *a[n];  //首先,提醒這段代碼在c中不行。 這個是一個具有n個int * 元素的數組

int (*a)[n];  //一個指針,指向一個具有n個int元素的數組。

int(**p)[n];  //一個指針,指向一個指針,後者指向一個具有n哥int元素的數組

int *(*p)[n];  //一個指針,指向一個具有n個int * 元素的數組

int (**const p)()const =0;  //一個常量指針,指向一個指向函數的指針。

int* (*p)();     //一個指針,指向一個傳回類型為int* 的函數。

參數和傳回值都會影響指針的類型:

char *(*p1)(int ,int);

char *(*p2)(short,short)=0;

p1=p2;  //error 類型不比對

智能指針通過重載->和* (也可能還有->*)操作符,來模仿指針的行為。

函數對象類型通過重載()操作符,來創造類似于函數指針的東西。

在c++中,一個對象可以喲多個有效的位址,是以指針的比較不是關于位址的問題,而是關于對象的“同一性”的問題。

繼續閱讀