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