提到c++中的指標,博主總是心驚膽戰。貌似編譯沒有問題的程式,執行時總會崩潰,彈出個大紅的叉叉,只能掩面淚奔,繼續除錯了。。。。廢話少說,看了《c++ primer》,還是總結一下c++指標和陣列這對兄弟千絲萬縷的聯絡吧。
那些基本的概念就不講了,直奔使用原則:
現在有如下定義,
int a[5]=
int *ip;
ip=a;
1、陣列名是首元素的位址,也就是指標
2、指標加減整型數值,所得結果仍然是指標,可以對其進行解引用,*(ip+2)//指向了元素a[2];
3、下標運算子[ ]和相對偏移量共同作用可以解引用指標,比如:
ip=&a[3];
ip[1]//就是a[4];
ip[-2]//就是a[1];
c風格的字串,即以null結尾的字元陣列, 可以這樣定義:
char *cp=「hello world」;
也可以char s=「hello world」;
cout<<*cp;//輸出的是字串的首字母,因為陣列名是首元素位址,解引用自然就是首字母
cout《指標和const,兩種組合方式易混淆
1、const double *cptr=&dval;
這種指標可以看成 自以為指向常量的指標,即不能通過解引用而修改物件的值,但是可以通過其他方式,比如直接賦值修改dval;同時,cptr的指向也可以改變,即不指向dval
2、double *const ptr=&dval2;
這種指標本身是個常量,即ptr的值確定,指向確定,不能修改,即使有ptr=ptr也不行,同時,必須在定義的時候初始化;但是dval2本身的值可以變化;
typedef string *pstring;
const pstring cstr;
問cstr是什麼型別的?
要注意,typedef並非像include一樣是文字的展開,因為pstring是指標型別,故其真正等價於 string *const cstr,即上面說的第二種型別;
摩爾定律和硬體之千絲萬縷
還記得剛進入大學買電腦的 那個貴啊,3 4年後的今天,電腦 降得讓我心頭一陣啊。每乙個人都會毫不猶豫地說一句 我那個時候的電腦配置多少多少好,多少,現在都淘汰得不能再淘汰了,確實,事實擺在面前,你不得不承認。但是想必大家或多或少聽說個摩爾定律,它是由英特爾 intel 創始人之一戈登 摩爾 gord...
記憶體管理與「三位址」的千絲萬縷(1)
記憶體管理與 三位址 的千絲萬縷 1 前記 我先談一下一點很深的體會 你有時候會為某個知識點在那絞盡腦汁地想解決,但是我通過這階段的學習知道,有時候想不通乙個問題,也許是自己的知識積累不夠造成的,所以這時請你不要急躁,迷茫。請你靜下心來好好再把這個問題涉及的知識點看看,多找點書看,當你能夠 融會貫通...
C語言 陣列指標和陣列指標的理解
陣列指標和指標陣列如何分辨呢看他後面的側重 例如 分解 int a 3 int 3 a 指標陣列 int b 3 int 3 b 陣列指標 片段 這段 定義了乙個陣列指標和乙個陣列指標,利用指標的偏移來做測試 include int b 3 陣列指標 char str1 good char str2...