程式設計師考試補課筆記-第十天 (轉)
現在來看看昨天的那個二維陣列圖,第九天圖一。我們定義一個指向二維數數的指標
int a[3][4];
int *p;
p=a;
其實這也指向一維陣列的指標完全沒有分別,二維陣列因為是行優先的,一行下來就是列順序了,我們可以這樣來用指標指向列,如下:
p++;
我們這裡就是指向了第0行的第1列了,那麼我們怎麼可以到第下一行呢,其實定義陣列時就給陣列分配好一連串的連續空間,我們直接可以將指標繼續往下移,當移到了0行最後一列時,加移的話就到了第1行了。其實C語言裡還有一種更方面的指向方法,看如下:
int (*p)[4] /*這裡是定義一個數指標,而這個指標是指向有陣列四個元素的指標*/
我們看看這種定義的方式,*p為什麼一定要括號括住呢,因為[]這個運算子比*優先,如果不加括號的話就變成了定義另一個指標最,至於是什麼指標在最面就會講到了,現在先來看看這種指標。
p=a;
p++; 這樣會得到什麼的結果呢?就是直接往下移一行了,這也是和前天說過的那個道理一樣,是按照定義的型別結合來到運算的。我們知道了如何可以移行,那麼該怎麼移列呢?這個問題又更復雜一點了,試著把指標移到第1行第2列看看。我們先來看看這個代表什麼吧,a+1 這就是第一行的首地址吧,同理p+1也是指向第一行的首地址。至於列呢?先想想一維陣列是怎麼移到列的,就是首地址加上列序吧!那麼我們就可以先表達出一維陣列的首地址先,*(p+1)+2,看,這樣是不是指向了第一行第二列了呢。我們不可以簡單的理解(p+1)為行,從另一種意義上可以看成是列的首地址了(這裡實在太難理解了,明還是有一點明,不過我還想用回自己一直對指標的理解好了,千萬不要綜合起來理解喔,這樣就太錯特錯了)。
好了說回了二維陣列成的現在來看看還有其它的什麼指標,字元指標是比較簡單的,不過也有它的一些特別之處。我們來看看以下的一些:
char *p;
p="ABC"; /*這裡說說,既然是字串就是一定有結束符的,這是和字元陣列不同的*/
這樣的賦值是可以的,這裡是將字串ABC的首地址賦給指標p,下現再看看另一個程式:
char a[4];
a="ABC";
這裡有錯嗎?對於C語言來說是錯了的了,因為字元陣列a是一個常量,不能給賦值。其它的高階語言就可以直接賦值給它就回事了,那麼我們想把ABC賦給字元陣列該怎麼呢,這裡有幾種方法,一種就是一個一個字元賦值,一種就是利用指標,不過這裡還是用回C語言庫裡的複製字串函式完成strcpy();大家應該都對這個函式不默生吧,那好,現在就給五分鐘做做練習,編制一個類於strcpy()的函式。…………時間真的過得快,我把我做的寫出來吧。
mycpy(char *s1,char *s2)
{ for(;*s1++=*s2++;); }
好了,就這麼短短二行就完成了複製功能,這隻有C語言才能做到的。
現在再來看看以下兩個程式吧
char *p,*q; char *p,*q,*r;
p="ABC"; r="ABC";
q="ABC"; p=r;
*q='D'; q=r;
printf("%s",%s",p,q); *q='D';
printf("%s,%s",p,q);
這裡的答案是什麼呢?自己先想想吧。
好了,應該都想完了吧,現在就給出正確的答案,第一條程式是輸出ABC,C,而第二條程式就是輸出DBC,DBC。這裡為什麼呢?其實是因為第一個程式都是指向了同一個地址,那當然就是值一樣啦。
現在就剩下函式指標了,其實我們平常也不怎麼多人,但是老師還是給我們講了一下,也提出了一個特別的地方,是今天我們才發現的,程式如下:
int b=0;
int a[2]={10,20};
int *ab(int *p)
{
p++;
return (p);
}
main()
{
b=*ab(a); /*這裡我們試著將的函式返回的地址再加*號,看看可不可以指到那個值,至於結果怎麼樣,我們也沒有試過,我在寫這篇日記時也沒有上過機試,大家有興趣也試試吧,這個問題我們是怎麼引出來的呢,其實我們一開始定義了一個指向函式的指標,就比如(*cd)()吧,我們提出瞭如果沒有了括號會怎麼樣,因為本來(*cd)()就是指向一個返回指標值的函式,那麼我們為了試驗所以另編一個返回地址的函式來試試*/
printf("%d",b);
}
好了,今天就將指標講完了,不過指標的運用就還有很多在後面呢,就我知道的就有結構體和共用體還可以用到指標,跟著就是其它的一個綜合運用連結串列、堆疊、佇列等等的。我想我就是這方面還一點都沒有吧,之前看了一下資料結構也沒有太大的興趣看下去了,因為我看到一大堆的指標都已經頭暈了。不過近幾天拿回來看看又好像明瞭些什麼似的,反正就覺得不太頭暈了吧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992831/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師考試補課筆記-第六天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第一天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第二天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第七天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第十一天 (轉)程式設計師筆記
- 程式設計師考試補課筆記-第十二天 (轉)程式設計師筆記
- 初級程式設計師考試大綱 (轉)程式設計師
- 高階程式設計師考試經驗 (轉)程式設計師
- 高階程式設計師考試大綱 (轉)程式設計師
- 2003年中級程式設計師考試日記--下午題(一) (轉)程式設計師
- 2003年中級程式設計師考試日記--上午題(二) (轉)程式設計師
- 2003年中級程式設計師考試日記--下午題(二) (轉)程式設計師
- 2001年高階程式設計師考試心得 (轉)程式設計師
- PHP程式設計考試PHP程式設計
- 軟體設計師考試要求及考試範圍
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- 5 月書訊 | 程式設計師的歷史課,是時候補補了程式設計師
- web 考試筆記Web筆記
- 程式設計師修煉之道-筆記程式設計師筆記
- 《Python語言程式設計》課程筆記Python程式設計筆記
- 12個程式設計師筆試面試寶典程式設計師筆試面試
- Java程式設計師的筆試題10道Java程式設計師筆試
- 程式設計師怎麼高效做筆記程式設計師筆記
- 歷年軟體設計師考試試題分析
- 程式設計師級資格與水平考試大綱(2003年) (轉)程式設計師
- 一個C++程式設計師的Delphi學習筆記 (轉)C++程式設計師筆記
- UI設計課程筆記(三)UI筆記
- 一個程式設計師的讀書筆記:程式設計的反思程式設計師筆記
- 寫給程式設計師的管理入門課程(轉)程式設計師
- 程式設計師校招筆試經驗小分享程式設計師筆試
- 程式設計師C語言經典筆試題程式設計師C語言筆試
- 【北京之旅】--程式設計師應聘技巧之筆試程式設計師筆試
- 中軟國際Java程式設計師筆試題Java程式設計師筆試
- 《程式設計師》試刊二卷首語 (轉)程式設計師
- Coursera課程筆記----C++程式設計----Week3筆記C++程式設計
- Coursera課程筆記----C程式設計進階----Week 5筆記C程式程式設計
- 浙大翁愷《C語言程式設計》課程筆記C語言程式設計筆記