對指標的理解 不斷積累

2021-06-09 19:14:07 字數 1035 閱讀 7973

1. int(*s[10])(int)

表示什麼?

這個語句看起來很複雜,不過我們一步步來分析。首先

s[10]

是乙個陣列,

*s[10]

說明他的元素是指標。那種型別的指標呢?整體來看這個語句:

int(*)(int)

,不用多說是函式指標。那麼進一步說就是,

s[10]

是乙個有

10個元素的指標陣列,每個元素都指向乙個函式,並且這個函式有乙個

int引數,並且返回

int型的值。這樣看好像很麻煩,不久是乙個指標陣列嗎,何必這麼麻煩。為了好理解,我們可以這麼看:

int(*)(int) s[10]。

類似的對於陣列指標,我們也可以這麼理解,以便加深記憶。比如

int (*s)[10];s

是乙個指向陣列的指標,這樣定義乙個指標說實話很難讓人理解。那麼我們不要被他這個樣子而迷惑,那就這麼理解吧:

int (*)[10] s;

這樣很符合一般指標定義的規則。

2. 如下語句:

char* dest=」hello,world」;

char* src=」hello」;

puts(strcpy(dest,src));

這樣做是錯誤的,原始是因為

dest

指向字串常量,不可修改其某個字元值。其實正確的寫法應該是

const char* dest=」hello,world」;

但是一般情況下不加

const

編譯的時候也不會出錯。但是如果

dest[2]=』a';

那麼就會出錯,即便這條語句合乎語法。如果

char a[100]; char* dest=a;

因為陣列中的元素是變數,可以修改,也就可成功列印。如果有下面語句

:char str[100]=」hello,world」

,這樣寫完全正確,因為只是用

hello world

初始化這個陣列而已。

對指標的理解

指針對一部分初學者來說一直是乙個無法逾越的障礙,沒有指標的c語言就好像沒有左腿的短跑運動員。今天我來試試換一種方法來理解指標,希望能幫還在為指標掙扎的朋友們理清思路,高手略過即可。我們先認為記憶體是一家客棧 看起來這和老掉牙的大樓的比喻沒什麼區別,但是請你耐心看下去 同大部分的客棧一樣,這家客棧有天...

對指標的理解

在c語言中可以認為一切皆位址。int a 10 1 根據函式型別申請一塊記憶體,並將記憶體的名字命名為a 2 將10以二進位制補碼形式寫入記憶體 賦值 我們將這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換的方式,稱為變數的 直接引用 記憶體是線性,因為不同型別的變數占用不同大小的...

個人對指標的指標理解

每次一看到兩個 號,就頭疼,終於在一次看源 時,看了半天才弄明白其中含義,所以寫一寫對指標的指標的理解。int main 以乙個小例子來說明 我們將a指標稱為一級指標 因為a指標變數儲存的位址儲存的是乙個具體的數值或者字元,反正不再是位址值 b稱為二級指標,因為b是指向指標的指標,以此類推long ...