乙個陣列的名稱,就是第乙個元素的位址,實際上可以看成乙個指向陣列第乙個元素的指標,而陣列名加上[num],則代表陣列第num個元素的內容,可以等價為陣列名前加*(讀作間接值符號會有助於理解)。舉個例子:
int a[5]
;int
* b = a;
cout << a << endl;
cout << b << endl;
cout << a[0]
<< endl;
cout <<
*b << endl;
執行上面的**片段,我們可以得到兩組相同的結果,因此,在面對陣列和指標時,我們不妨把與*等效。那麼對於指向指標的指標等更複雜的情況如何搞清楚關係呢,我認為可以使用畫方框的辦法。
先舉乙個簡單的例子:
int
* a;
int*
* b;
方框圖用方框表示儲存單元,箭頭表示指向關係。第一行**可以用方框圖表示為:
第二行**可以用方框圖表示為:
舉個更複雜的例子mixtypes.cpp(來自c++primerplus第六版):
#include
using
namespace std;
struct antarctica_years_end
;int
main()
;
cout << arp[1]
-> year << endl;
const antarctica_years_end *
* ppa = arp;
auto ppb = arp;
cout <<
(*ppa)
-> year << endl;
cout <<(*
*(ppb+1)
).year << endl;
return0;
}
const antarctica_years_end * arp[3]
=;
這句**,定義了乙個指標陣列,陣列中的每個元素都是乙個指標,指向乙個antarctica_years_end結構型別的變數,那麼我們可以根據這個關係畫(對於arp)出如下方框圖:
第乙個儲存單元名字為arp,第二個儲存單元是arp陣列中第乙個元素(指標),該元素指向乙個antarctica_years_end結構型別的值。這樣我們也就不難理解下面這句**:
const antarctica_years_end *
* ppa = arp;
這裡是建立乙個指向antarctica_years_end指標型別的指標,化成方框圖我們可以很清楚的看出實際上名稱為ppa和arp的兩個儲存單元中儲存了相同的乙個位址,這個位址都指向arp陣列的第乙個元素。
cout <<
(*ppa)
-> year << endl;
cout <<(*
*(ppb+1)
).year << endl;
將與等效,每乙個其實就是方框圖向箭頭方向前進乙個方框即可。 乙個簡單的C 智慧型指標的實現
c 在堆上分配的記憶體需要分配者自己釋放,但是有時分配者由於某種情況忘記釋放,此時會造成記憶體洩漏,因此實現了乙個簡單的智慧型指標。引用計數類,負責管理動態分配的記憶體的使用者數量 class reference reference 自增 int add 自減 int release private...
C 乙個簡單的方法過載例子
定義calculate類 class calculate 方法過載 求兩實數之商 static public double divide double x,double y 這裡定義了兩個名稱同為divide 的方法,它們的方法名稱完全相同,但引數型別不同,這種方式稱為方法過載。那麼遇到語句 div...
乙個簡單的日誌方法
file g filelog null void loginit bool writelog lpctstr format,int res tcsftime outbuf,128,t 20 y年 m月 d日 h m s localtime tm tchar lpszinfobuf 1024 va l...