這樣還弄不死指標?

2022-03-11 11:36:32 字數 1641 閱讀 9952

釐清」指標是什麼「這件事

什麼是整型變數?我認為可以說成是接收整型資料的變數。這樣就可以得到指標變數的定義——

接收指標(位址)的變數——指標就是位址,這和指標變數是兩回事!!指標是個(帶箭頭的)16

進製的數,

而指標變數就是盛放這個數的容器。還不能理解?換句話說,位址可以看成是特殊點的資料型別,和

整型、字元、浮點等乙個地位。但是位址這廝為了弄出神秘感來,硬是給自己扣了個頭銜——指標。

其實,乙個指標變數攜帶的資訊不只是乙個位址而已,還有要分配的記憶體大小。變數的指標(位址)屬性是

由指標符號 '*'

標識的,而記憶體大小是由指標變數型別標識的。

指標變數初始化

先看兩段**:

1

int 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...

這樣的電子發票報銷管理對會計來說是添堵還是助力?

最近看到一條新聞,關於發票查驗真偽功能的高仿軟體,高仿國家稅控軟體 肉眼難辨,開發者曾是 大廠 的 絕大部分的職場人員已經習慣了收取和使用電子發票,尤其會計等財務從業者來說,電子發票已經是工作的的重要組成部分,習慣了電子發票列印報銷。對於電子發票報銷的三大難題 如何防止重複報銷 如何快速查驗真偽,以...