釐清」指標是什麼「這件事
什麼是整型變數?我認為可以說成是接收整型資料的變數。這樣就可以得到指標變數的定義——
接收指標(位址)的變數——指標就是位址,這和指標變數是兩回事!!指標是個(帶箭頭的)16
進製的數,
而指標變數就是盛放這個數的容器。還不能理解?換句話說,位址可以看成是特殊點的資料型別,和
整型、字元、浮點等乙個地位。但是位址這廝為了弄出神秘感來,硬是給自己扣了個頭銜——指標。
其實,乙個指標變數攜帶的資訊不只是乙個位址而已,還有要分配的記憶體大小。變數的指標(位址)屬性是
由指標符號 '*'
標識的,而記憶體大小是由指標變數型別標識的。
指標變數初始化
先看兩段**:
1int a = 10; int a = 10; 2
int *p; int *p;
3 p = &a; //
指標變數初始化 *p = a;
4 *p = a; //
指標初始化 p = &a;
哪邊的**能執行呢?
在我的測試(linux/gcc
)中,右邊的**肯定會出現」段錯誤」和「p
未初始化「。
指標變數初始化,是很好理解的,就是獲得乙個合法的記憶體位址。注意,位址雖然是由
編譯器隨機分配的,但是初始化時分配的記憶體一定是合法的(
否則幹嘛提示」未初始化「)
。而指標初始化,就是對其指向的記憶體單元寫資料,但這段記憶體單元讓不讓你寫呢?這裡就有很多問題了。
指標初始化
如果我們沒有對指標初始化,編譯器當然會做這件事。只是做得可是不近人情啊,它會隨便給個位址,
至於這個位址是不是可以訪問它就不管了。這就好比它指給你個座位,可上面坐著
乙個2公尺02
的俄羅斯大漢,人家會讓你坐嗎?
如果沒有初始化指標,編譯會隨意分配位址,總得來說有3
種情況:
1、指向null
(0x0...)
,也就是空指標。
(至少是安全的)
2、指向合法位址。
(運氣真好,不過隱患最大)
3、指向非法位址,也可叫野指標。
(可能要悲催啦)
對於空指標,它指向的記憶體位址是肯定不能訪問的,所以是安全的。
第二種現象幾乎不會發生,即使碰上了,但還是無法保證其後續記憶體單元是可以讀寫的。
第三種情況是很麻煩的,如果它儲存了系統或應用程式**,並可寫的話,後果是很嚴重的。但如果在pc
上開發時,還是可以把心放到肚子裡的,因為作業系統肯定會down
掉這段**。如果是做嵌入式開發,特別
是在微控制器上的時候,這種現象就只能靠使用者自己去避免啦。
上面的東西都好理解,但是只有用的多了熟練了,才能做到避免錯誤。指標有很多應用,比如鍊錶、
佇列、棧以及用鍊錶表示文本來處理文字等,這些東西都弄通了,指標當然也就不神秘啦。
SouceInsight的幾個視窗弄的還原不了
手賤,把sourceinsight的幾個視窗搞的還原不了。以為解除安裝再裝就可以了。卸了轉,裝了解除安裝,還是之前一樣亂的,以為沒有解除安裝乾淨,重複好幾次。還是不行。最後找到原因 可能之前改的配置沒有給解除安裝.他在c users zhangquanstudent documents 這個解除安裝...
this指標可以這樣理解
有下面的乙個簡單的類 class cnullpointcall int cnullpointcall m istatic 0 void cnullpointcall test1 void cnullpointcall test2 void cnullpointcall test3 int itest...
這樣的電子發票報銷管理對會計來說是添堵還是助力?
最近看到一條新聞,關於發票查驗真偽功能的高仿軟體,高仿國家稅控軟體 肉眼難辨,開發者曾是 大廠 的 絕大部分的職場人員已經習慣了收取和使用電子發票,尤其會計等財務從業者來說,電子發票已經是工作的的重要組成部分,習慣了電子發票列印報銷。對於電子發票報銷的三大難題 如何防止重複報銷 如何快速查驗真偽,以...