每天一点C++(之四)
每天一點C++(之四)
指針
指針的危險:當我們創建指針的時候,計算機會分配內存來用于儲存指針所指的地址值,但是不會分配內存給指針所指向的數據。因此,如果我們出現這樣的一種寫法的話就會造成不必要的煩惱:
long* fellow; *fellow = 22;上面的代碼中fellow是一個指針,但是因為fellow并沒有分配到地址值,所以它的地址可能是任何值,這樣的一種未知性導致了不管fellow的地址值是什么程序都會將它解釋為儲存22的地址。這樣就有可能會破壞程序代碼。而且因為不確定,導致的錯誤十分的隱蔽。
C++中的指針不是整型,但是,如果想要把地址值以整數的形式賦給指針的話,我們通常可以這樣來做:
int* pt; pt = (int* ) 0xB8000000;用強制轉換類型的方式就可以讓我們直接對指針的地址進行操作(雖然不知道這樣做有什么必要 ~ ~!)
new運算符
當我們想要在程序運行時向系統索要內存以進行其他操作時,我們可以使用new運算符來向系統要。new運算符向系統要回來的是內存的地址,所以我們通常要創建一個指針來存放新內存的地址。然后當我們用完內存后,我們應該要用delete來釋放內存(不然會發生內存泄漏哦! 即在程序生命周期中被分配的內存因為沒有釋放而無法再次使用,當內存泄漏嚴重的時候,會導致程序因內存爆滿而終止),同時不要嘗試對已經釋放的內存塊再次釋放內存,這樣也會導致錯誤的發生。但有時候我們也會用到兩個指向相同內存的指針,這樣就會增加錯誤刪除同一內存塊的可能性。(我無語了~ ~)
對于用new來創建動態數組,別忘了加[]在后面哦!!int* pt = new int [100]; delete [] pt;
對于動態數組的使用,我們可以直接以指針名加[]就行了,而指針名+整數如:1;就相當于數組名+1,即指向下一個元素。
指針,數組
C++內部處理數組的方式跟指針十分相像,就像是把指針變量加1,其增加的值等于指向的類型占用的字節數。而對于數組而言,數組名加1的操作也是一樣。雖然多數情況下,可以用相同的方式來使用數組名跟指針名如使用方括號表示法,或者用解除引用運算符" * "但是它們在一些情況下是有區別的,指針值允許修改,但是數組名確實常量。,還有的就是對于數組應用sizeof運算符得到的是數組的總長度,而對指針運用的話得到的是指針的長度。即使指針指向的是一個數組。還有一個有趣的地方就是對數組名進行取地址操作時,數組名不會被解釋成為其本身的地址,而是解釋為整個數組的地址,粗略一看好像沒有什么不同,都是同一個地址,但是當我們對數組取地址后進行加減操作增加的地址值就是整個數組本身的長度(上碼):
short tell[10]; cout << tell << endl; cout << &tell << endl; cout << &tell+2 << endl;所以對于數組與指針之間的異同我們也應該要找個時間認真理解一下哇!!
轉載于:https://www.cnblogs.com/jmsphere/p/3695390.html
總結
以上是生活随笔為你收集整理的每天一点C++(之四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Klockwork告警常见错误
- 下一篇: [OpenJudge] 百练2754 八