青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

冰狼

在努力、磨練、打擊下不斷地向著理想的財務自由方向前進

C++復習:C基礎(指針)

為了正確地訪問內存單元,必須為每個內存單元編上號。根據一個內存單元的編號即可準確地找到該內存單元。內存單元的編號也叫做地址。既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。內存單元的指針和內存單元的內容是兩個不同的概念。

對于一個內存單元來說,單元的地址即為指針, 其中存放的數據才是該單元的內容。在C語言中, 允許用一個變量來存放指針,這種變量稱為指針變量。因此, 一個指針變量的值就是某個內存單元的地址或稱為某內存單元的指針。

嚴格地說,一個指針是一個地址, 是一個常量。而一個指針變量卻可以被賦予不同的指針值,是變量。既然指針變量的值是一個地址,那么這個地址不僅可以是變量的地址,也可以是其它數據結構的地址。在一個指針變量中存放一個數組或一個函數的首地址有何意義呢? 因為數組或函數都是連續存放的。通過訪問指針變量取得了數組或函數的首地址, 也就找到了該數組或函數。這樣一來,凡是出現數組,函數的地方都可以用一個指針變量來表示,只要該指針變量中賦予數組或函數的首地址即可。這樣做,將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中,一種數據類型或數據結構往往都占有一組連續的內存單元。 用“地址”這個概念并不能很好地描述一種數據類型或數據結構,而“指針”雖然實際上也是一個地址,但它卻是一個數據結構的首地址,它是“指向”一個數據結構的,因而概念更為清楚,表示更為明確。這也是引入“指針”概念的一個重要原因。

對指針變量的類型說明包括三個內容:
(1)指針類型說明,即定義變量為一個指針變量;
(2)指針變量名;
(3)變量值(指針)所指向的變量的數據類型。
  其一般形式為: 類型說明符 *變量名;
  其中,*表示這是一個指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數據類型。
應該注意的是,一個指針變量只能指向同類型的變量,如float *p只能指向浮點變量,不能時而指向一個浮點變量, 時而又指向一個字符變量。

指針變量同普通變量一樣,使用之前不僅要定義說明, 而且必須賦予具體的值。未經賦值的指針變量不能使用, 否則將造成系統混亂,甚至死機。指針變量的賦值只能賦予地址, 決不能賦予任何其它數據,否則將引起錯誤。在C語言中, 變量的地址是由編譯系統分配的,對用戶完全透明,用戶不知道變量的具體地址。 C語言中提供了地址運算符&來表示變量的地址。其一般形式為: & 變量名; 如&a變示變量a的地址,&b表示變量b的地址。 變量本身必須預先說明。

指針變量可以進行某些運算,但其運算的種類是有限的。 它只能進行賦值運算和部分算術運算及關系運算。
1.指針運算符
(1)取地址運算符&
  取地址運算符&是單目運算符,其結合性為自右至左,其功能是取變量的地址。
(2)取內容運算符*
  取內容運算符*是單目運算符,其結合性為自右至左,用來表示指針變量所指的變量。在*運算符之后跟的變量必須是指針變量。需要注意的是指針運算符*和指針變量說明中的指針說明符* 不是一回事。在指針變量說明中,“*”是類型說明符,表示其后的變量是指針類型。而表達式中出現的“*”則是一個運算符用以表示指針變量所指的變量。

使用字符串指針變量與字符數組的區別
用字符數組和字符指針變量都可實現字符串的存儲和運算。 但是兩者是有區別的。在使用時應注意以下幾個問題:
1. 字符串指針變量本身是一個變量,用于存放字符串的首地址。而字符串本身是存放在以該首地址為首的一塊連續的內存空間中并以‘\0’作為串的結束。字符數組是由于若干個數組元素組成的,它可用來存放整個字符串。
2. 對字符數組作初始化賦值,必須采用外部類型或靜態類型,如: static char st[]={“C Language”};而對字符串指針變量則無此限制,如: char *ps="C Language";
3. 對字符串指針方式 char *ps="C Language";可以寫為: char *ps; ps="C Language";而對數組方式:
static char st[]={"C Language"};
不能寫為:
char st[20];st={"C Language"};
而只能對字符數組的各元素逐個賦值。
  從以上幾點可以看出字符串指針變量與字符數組在使用時的區別,同時也可看出使用指針變量更加方便。前面說過,當一個指針變量在未取得確定地址前使用是危險的,容易引起錯誤。但是對指針變量直接賦值是可以的。因為C系統對指針變量賦值時要給以確定的地址。因此,
char *ps="C Langage";
或者 char *ps;
ps="C Language";都是合法的。

函數指針變量
在C語言中規定,一個函數總是占用一段連續的內存區, 而函數名就是該函數所占內存區的首地址。 我們可以把函數的這個首地址(或稱入口地址)賦予一個指針變量, 使該指針變量指向該函數。然后通過指針變量就可以找到并調用這個函數。 我們把這種指向函數的指針變量稱為“函數指針變量”。
函數指針變量定義的一般形式為:
類型說明符 (*指針變量名)();
其中“類型說明符”表示被指函數的返回值的類型。“(* 指針變量名)”表示“*”后面的變量是定義的指針變量。 最后的空括號表示指針變量所指的是一個函數。
使用函數指針變量還應注意以下兩點:
a. 函數指針變量不能進行算術運算,這是與數組指針變量不同的。數組指針變量加減一個整數可使指針移動指向后面或前面的數組元素,而函數指針的移動是毫無意義的。
b. 函數調用中"(*指針變量名)"的兩邊的括號不可少,其中的*不應該理解為求值運算,在此處它只是一種表示符號。


指針型函數
所謂函數類型是指函數返回值的類型。 在C語言中允許一個函數的返回值是一個指針(即地址), 這種返回指針值的函數稱為指針型函數。
定義指針型函數的一般形式為:
類型說明符 *函數名(形參表)
{
…… /*函數體*/
}
其中函數名之前加了“*”號表明這是一個指針型函數,即返回值是一個指針。類型說明符表示了返回的指針值所指向的數據類型。

main函數可以帶參數,這個參數可以認為是 main函數的形式參數。C語言規定main函數的參數只能有兩個, 習慣上這兩個參數寫為argc和argv。因此,main函數的函數頭可寫為: main (argc,argv)C語言還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數組。加上形參說明后,main函數的函數頭應寫為:
main (argc,argv)
int argv;
char *argv[];或寫成:
main (int argc,char *argv[])
  由于main函數不能被其它函數調用, 因此不可能在程序內部取得實際值。那么,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從操作系統命令行上獲得的。當我們要運行一個可執行文件時,在DOS提示符下鍵入文件名,再輸入實際參數即可把這些實參傳送到main的形參中去。

通過指針訪問變量稱為間接訪問, 簡稱間訪。由于指針變量直接指向變量,所以稱為單級間訪。 而如果通過指向指針的指針變量來訪問變量則構成了二級或多級間訪。在C語言程序中,對間訪的級數并未明確限制, 但是間訪級數太多時不容易理解解,也容易出錯,因此,一般很少超過二級間訪。 指向指針的指針變量說明的一般形式為:
類型說明符** 指針變量名;

小結
1. 指針是C語言中一個重要的組成部分,使用指針編程有以下優點:
(1)提高程序的編譯效率和執行速度。
(2)通過指針可使用主調函數和被調函數之間共享變量或數據結構,便于實現雙向數據通訊。
(3)可以實現動態的存儲分配。
(4)便于表示各種數據結構,編寫高質量的程序。

2. 指針的運算
(1)取地址運算符&:求變量的地址
(2)取內容運算符*:表示指針所指的變量
(3)賦值運算
·把變量地址賦予指針變量
·同類型指針變量相互賦值
·把數組,字符串的首地址賦予指針變量
·把函數入口地址賦予指針變量
(4)加減運算
對指向數組,字符串的指針變量可以進行加減運算,如p+n,p-n,p++,p--等。對指向同一數組的兩個指針變量可以相減。對指向其它類型的指針變量作加減運算是無意義的。
(5)關系運算
指向同一數組的兩個指針變量之間可以進行大于、小于、 等于比較運算。指針可與0比較,p==0表示p為空指針。

3. 與指針有關的各種說明和意義見下表。
int *p;     p為指向整型量的指針變量
int *p[n];   p為指針數組,由n個指向整型量的指針元素組成。
int (*p)[n];  p為指向整型二維數組的指針變量,二維數組的列數為n
int *p()    p為返回指針值的函數,該指針指向整型量
int (*p)()   p為指向函數的指針,該函數返回整型量
int **p     p為一個指向另一指針的指針變量,該指針指向一個整型量。

4. 有關指針的說明很多是由指針,數組,函數說明組合而成的。
但并不是可以任意組合,例如數組不能由函數組成,即數組元素不能是一個函數;函數也不能返回一個數組或返回另一個函數。例如
int a[5]();就是錯誤的。

5. 關于括號
在解釋組合說明符時, 標識符右邊的方括號和圓括號優先于標識符左邊的“*”號,而方括號和圓括號以相同的優先級從左到右結合。但可以用圓括號改變約定的結合順序。

6. 閱讀組合說明符的規則是“從里向外”。
從標識符開始,先看它右邊有無方括號或園括號,如有則先作出解釋,再看左邊有無*號。 如果在任何時候遇到了閉括號,則在繼續之前必須用相同的規則處理括號內的內容。例如:
int*(*(*a)())[10]
↑ ↑↑↑↑↑↑
7 6 4 2 1 3 5
上面給出了由內向外的閱讀順序,下面來解釋它:
(1)標識符a被說明為;
(2)一個指針變量,它指向;
(3)一個函數,它返回;
(4)一個指針,該指針指向;
(5)一個有10個元素的數組,其類型為;
(6)指針型,它指向;
(7)int型數據。
因此a是一個函數指針變量,該函數返回的一個指針值又指向一個指針數組,該指針數組的元素指向整型量。


posted on 2007-06-19 11:28 在法律保護下合法地搶銀行 閱讀(299) 評論(0)  編輯 收藏 引用 所屬分類: C++

公告

轉載、引用、收藏,請標明來自:

http://m.shnenglu.com/paladino

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

留言簿(2)

隨筆分類(10)

文章分類(5)

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩1区| 亚洲午夜激情在线| 欧美日韩国产一区二区| 久久天天躁狠狠躁夜夜av| 欧美一区二区三区日韩视频| 亚洲男女自偷自拍图片另类| 亚洲一区激情| 中文国产一区| 亚洲娇小video精品| 亚洲国产日韩欧美综合久久| 亚洲激情视频| 一区二区三区精品久久久| 9l国产精品久久久久麻豆| 一本色道久久综合亚洲91| 亚洲一区久久| 久久久国产精品一区二区三区| 久久久综合精品| 欧美激情亚洲综合一区| 日韩一本二本av| 99视频精品全部免费在线| 亚洲在线视频| 久久久久久97三级| 久久手机免费观看| 欧美日本精品| 国内精品视频一区| 日韩视频免费在线观看| 欧美一级淫片aaaaaaa视频| 免费成人av在线| 一本综合精品| 久久久久综合| 国产伦精品一区二区三| 1024成人| 西瓜成人精品人成网站| 亚洲国产导航| 宅男精品导航| 欧美激情一区二区三区| 黄页网站一区| 午夜精品av| 亚洲精品一区二区三区不| 久久本道综合色狠狠五月| 欧美伦理91i| 在线日韩日本国产亚洲| 午夜视频一区| 一本久久综合亚洲鲁鲁五月天| 久久夜色精品一区| 国产亚洲欧洲一区高清在线观看| 制服丝袜激情欧洲亚洲| 亚洲夫妻自拍| 麻豆精品传媒视频| 国产日韩欧美三区| 亚洲欧美精品一区| 日韩一二在线观看| 欧美精品在线播放| 亚洲精品免费看| 欧美电影免费观看高清完整版| 久久精品30| 精品91免费| 嫩草国产精品入口| 久久九九国产| 黄色成人在线网址| 久久综合九色九九| 久久精品视频亚洲| 极品少妇一区二区| 久久午夜影视| 欧美风情在线| 欧美成人免费在线视频| 在线观看日韩专区| 另类人畜视频在线| 性欧美办公室18xxxxhd| 国产精品美女黄网| 欧美伊人久久久久久久久影院| 一区二区电影免费观看| 欧美日韩国产免费| 夜色激情一区二区| 艳女tv在线观看国产一区| 欧美三级视频| 亚洲欧美国产另类| 亚洲性夜色噜噜噜7777| 国产欧美一区二区三区另类精品 | 久久久久在线观看| 亚洲精品久久久蜜桃| 亚洲黄色在线| 欧美日韩一区二区三区四区在线观看| aa成人免费视频| 一区二区三区国产盗摄| 国产精品美女在线| 久久久久久婷| 欧美成年人网| 亚洲一区二区在线| 欧美一区二区免费观在线| 狠狠色丁香婷综合久久| 欧美 日韩 国产一区二区在线视频 | 国产精品你懂的在线欣赏| 小处雏高清一区二区三区 | 亚洲欧美一区二区激情| 校园激情久久| 在线观看福利一区| 亚洲国产精品va| 国产精品视频一区二区三区| 巨胸喷奶水www久久久免费动漫| 欧美国产三级| 欧美在线影院在线视频| 欧美1区3d| 久久国产主播| 欧美日韩中文字幕精品| 美女视频黄a大片欧美| 欧美激情视频在线播放| 久久都是精品| 欧美日韩1080p| 欧美二区视频| 国产一区二区精品丝袜| 亚洲精美视频| 影音先锋亚洲视频| 亚洲欧美韩国| 亚洲视频在线观看| 女人天堂亚洲aⅴ在线观看| 欧美一区亚洲二区| 欧美色图五月天| 欧美国产日韩免费| 亚洲影院污污.| 美日韩丰满少妇在线观看| 欧美日韩免费| 日韩视频免费| 久久电影一区| 亚洲国产午夜| 久久夜色精品| 在线播放亚洲一区| 欧美成人免费全部| 亚洲第一中文字幕| 一本色道久久| 99综合在线| 午夜激情亚洲| 久久亚洲高清| 一本一本大道香蕉久在线精品| 一本色道久久88亚洲综合88| 国内精品嫩模av私拍在线观看| 亚洲欧美国产精品桃花| 国产一区二区三区观看| 欧美黄色一区| 国产亚洲一区在线| 亚洲一区二区三区精品动漫| 亚洲精品国产欧美| 亚洲国产婷婷综合在线精品 | 久久精品一二三| 日韩一级精品视频在线观看| 亚洲最新在线| 欧美日本国产视频| 久久精品视频99| 欧美黄色一区二区| 亚洲亚洲精品在线观看| 亚洲女爱视频在线| 91久久久在线| 亚洲视频一区在线| 亚洲国产精品高清久久久| 亚洲欧美日韩爽爽影院| 国产亚洲视频在线| 久久久91精品国产| 亚洲视频一区在线观看| 麻豆av一区二区三区| 亚洲图片欧美午夜| 国产一区二区三区丝袜 | 久久精品国产v日韩v亚洲 | 欧美有码在线观看视频| 国产精品毛片a∨一区二区三区|国| 日韩视频不卡中文| 一区二区三区欧美视频| 一本色道久久综合亚洲精品按摩| 一本色道久久综合亚洲91| 国产精品久久久久国产a级| 久久国产精品一区二区三区四区| 国产精品99久久99久久久二8| 嫩草影视亚洲| 亚洲激情av| 新狼窝色av性久久久久久| 亚洲四色影视在线观看| 欧美一区二区福利在线| 亚洲欧美激情诱惑| 极品尤物一区二区三区| 一区三区视频| 亚洲伊人一本大道中文字幕| 小处雏高清一区二区三区| 久久超碰97中文字幕| 一本色道久久综合狠狠躁篇的优点| 国产精品理论片在线观看| 蜜臀av国产精品久久久久| 久久另类ts人妖一区二区| 久久国产日韩| 欧美一二区视频| 欧美激情1区| 亚洲国产经典视频| 欧美激情免费观看| 亚洲一区二区三区中文字幕 | 久久综合图片| 亚洲福利视频一区二区| 久久久一二三| 久久国产精品99久久久久久老狼| 一区二区日韩伦理片| 欧美视频一区二区三区…| 一本色道久久88精品综合| 久久久美女艺术照精彩视频福利播放|