程序員考試補課筆記-5_第1頁
程序員考試補課筆記-5_第2頁
程序員考試補課筆記-5_第3頁
程序員考試補課筆記-5_第4頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第第頁程序員考試補課筆記程序員考試補課筆記-第十天

發(fā)表于:2023-05-26來源::點擊數(shù):標簽:

今天接著上天的二維數(shù)組,我們看看指向二維數(shù)組的指針是怎么的。在講之前我想再重復一次,如果你自己理解好二維數(shù)組的就按你以往的去理解吧。不過多想想幾種方法也是一件好事,那么下面就來講講了?,F(xiàn)在來看看昨天的那個二維數(shù)組圖,第九天圖一。我們定義一

今天接著上天的二維數(shù)組,我們看看指向二維數(shù)組的指針是怎么的。在講之前我想再重復一次,如果你自己理解好二維數(shù)組的就按你以往的去理解吧。不過多想想幾種方法也是一件好事,那么下面就來講講了。

現(xiàn)在來看看昨天的那個二維數(shù)組圖,第九天圖一。我們定義一個指向二維數(shù)數(shù)的指針

inta[3][4];

int*p;

p=a;

其實這也指向一維數(shù)組的指針完全沒有分別,二維數(shù)組因為是行優(yōu)先的,一行下來就是列順序了,我們可以這樣來用指針指向列,如下:

p++;

我們這里就是指向了第0行的第1列了,那么我們怎么可以到第下一行呢,其實定義數(shù)組時內(nèi)存就給數(shù)組分配好一連串的連續(xù)空間,我們直接可以將指針繼續(xù)往下移,當移到了0行最后一列時,加移的話就到了第1行了。其實C語言里還有一種更方面的指向方法,看如下:

int(*p)[4]/*這里是定義一個數(shù)指針,而這個指針是指向有數(shù)組四個元素的指針*/

我們看看這種定義的方式,*p為什么一定要括號括住呢,因為[]這個運算符比*優(yōu)先,如果不加括號的話就變成了定義另一個指針最,至于是什么指針在最面就會講到了,現(xiàn)在先來看看這種指針。

p=a;

p++;這樣會得到什么的結(jié)果呢?就是直接往下移一行了,這也是和前天說過的那個道理一樣,是按照定義的類型結(jié)合來到運算的。我們知道了如何可以移行,那么該怎么移列呢?這個問題又更復雜一點了,試著把指針移到第1行第2列看看。我們先來看看這個表達式代表什么吧,a+1這就是第一行的首地址吧,同理p+1也是指向第一行的首地址。至于列呢?先想想一維數(shù)組是怎么移到列的,就是首地址加上列序吧!那么我們就可以先表達出一維數(shù)組的首地址先,*(p+1)+2,看,這樣是不是指向了第一行第二列了呢。我們不可以簡單的理解(p+1)為行,從另一種意義上可以看成是列的首地址了(這里實在太難理解了,明還是有一點明,不過我還想用回自己一直對指針的理解好了,千萬不要綜合起來理解喔,這樣就太錯特錯了)。

好了說回了二維數(shù)組成的現(xiàn)在來看看還有其它的什么指針,字符指針是比較簡單的,不過也有它的一些特別之處。我們來看看以下的一些程序:

char*p;

p="ABC";/*這里說說,既然是字符串就是一定有結(jié)束符的,這是和字符數(shù)組不同的*/

這樣的賦值是可以的,這里是將字符串ABC的首地址賦給指針p,下現(xiàn)再看看另一個程序:

chara[4];

a="ABC";

這里有錯嗎?對于C語言來說是錯了的了,因為字符數(shù)組a是一個常量,不能給賦值。其它的高級語言就可以直接賦值給它就回事了,那么我們想把ABC賦給字符數(shù)組該怎么呢,這里有幾種方法,一種就是一個一個字符賦值,一種就是利用指針,不過這里還是用回C語言函數(shù)庫里的復制字符串函數(shù)完成strcpy();大家應(yīng)該都對這個函數(shù)不默生吧,那好,現(xiàn)在就給五分鐘做做練習,編制一個類于strcpy()的函數(shù)?!瓡r間真的過得快,我把我做的寫出來吧。

mycpy(char*s1,char*s2)

{for(;*s1++=*s2++;);}

好了,就這么短短二行就完成了復制功能,這只有C語言才能做到的。

現(xiàn)在再來看看以下兩個程序吧

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);

這里的答案是什么呢?自己先想想吧。

好了,應(yīng)該都想完了吧,現(xiàn)在就給出正確的答案,第一條程序是輸出ABC,DBC,而第二條程序就是輸出DBC,DBC。這里為什么呢?其實是因為第一個程序都是指向了同一個地址,那當然就是值一樣啦。

現(xiàn)在就剩下函數(shù)指針了,其實我們平常也不怎么多人,但是老師還是給我們講了一下,也提出了一個特別的地方,是今天我們才發(fā)現(xiàn)的,程序如下:

intb=0;

inta[2]={10,20};

int*ab(int*p)

{

p++;

return(p);

}

main()

{

b=*ab(a);/*這里我們試著將調(diào)用的函數(shù)返回的地址再加*號,看看可不可以指到那個值,至于結(jié)果怎么樣,我們也沒有試過,我在寫這篇日記時也沒有上過機試,大家有興趣也試試吧,這個問題我們是怎么引出來的呢,其實我們一開始定義了一個指向函數(shù)的指針,就比如(*cd)()吧,我們提出了如果沒有了括號會怎么樣,因為本來(*cd)()就是指向一個返回指針值的函數(shù),那么我們?yōu)榱嗽囼炈粤砭幰粋€返回地址的函數(shù)來試試*/

printf("%d",b);

}

好了,今天就將指針講完了,不過指針的運用就還有很多在后面呢,就我知道的就有結(jié)構(gòu)體和共用體還可以用到指針,跟著就是其它的一個綜合運

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論