1.變數的位址和指標
乙個變數實質上是代表了「記憶體中的某個儲存單元」;計算機的記憶體是以位元組為單位的一片連續的儲存空間,每乙個位元組都有乙個編號,這個編號就稱為記憶體位址。因為記憶體的儲存空間是連續的,所以記憶體中的位址號也是連續的,並且用二進位制來表示。每個變數的位址是指該變數所佔儲存單元的第乙個位元組的位址(如a的位址為1012)。
(1)直接訪問:程式中我們對變數進行訪問操作,實際上就是對某個位址的儲存單元進行操作。
指標變數:存放位址的變數
(2)間接訪問:變數p有自己的位址(2002),若將變數a的記憶體位址(1012)存放到變數p中,這時要訪問變數a所代表的儲存單元,可以先找到變數p的位址,從中取出變數a的位址,然後再去訪問以1012為首位址的儲存單元。如下圖所示,指標變數p指向變數a
2.指標變數的定義和指標變數的基型別
定義指標:型別名 *指標變數名1,*指標變數名2,……;
例如: int *pi,pj;
每個變數前的星號是乙個說明符,用來說明該變數是指標變數,注意:變數前的星號不可省略;例子中int是pi和pj指標的基型別,只能存放int型別變數的位址。
int
**p,
*s,k=20;
s=&k; p=
&s;
這裡定義的p為乙個指向指標的指標變數,「&」是求位址運算子,s=&k用來求出整型變數k的位址賦給指標變數s,而使s指向k;
乙個指標變數中存放的是乙個儲存單元的位址值,指標移動的最小單位是乙個儲存單元,而不是乙個位元組。
3.給指標變數賦值
指標變數=&變數; 如p=&k;
求位址運算子只能應用於變數和陣列,不可以用於表示式、常量或者被說明為register的變數。
在呼叫scanf函式時,輸入的各變數之前都必須加符號&,這就是求位址運算,如scanf(格式控制,指標變數);scanf(「%d」,p);
給指標賦「空」值:p=null;或p=』\0』;或p=0;(null是在stdio.h標頭檔案中定義的預定義符)
4.對指標變數的操作
間接訪問運算子(也稱間址運算子)「」,當指標變數中存放了乙個確切的位址時,就可以用「」通過指標來引用該位址的儲存單元。
例如:int p,i=10,j;
p=&i;則賦值語句:j=p;
等價於j=i;
間接訪問運算子是乙個單目運算子,其運算物件或者是存放位址的指標變數,或者是位址,如:j=(&i);
「&」和「」都是自右向左結合。
移動指標:當指標指向一串連續的儲存單元時,可以對指標變數進行加上或者減去乙個整數的運算,也可以對指向同一串連續儲存單元的兩個指標進行相減運算。
q=p+2; /是指標q指向儲存單元a[2]/
q++; /向高位址移動指標q,使指標q指向儲存單元a/
q++; /向高位址移動指標q,使指標q指向儲存單元a/
q–; /使指標q向低位址移動,指標q指向儲存單元a/
p++; /向高位址移動指標p,使指標p指向儲存單元a/
5.函式之間位址值的傳遞
若函式的形參為指標型別,呼叫該函式時,對應的實參必須是基型別相同的位址值或者是已指向某個儲存單元的指標變數。,利用指標可以改變實參的值
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
第八章 指標
指標 1,指標 指標,英文名是pointer,也叫位址,他是常量。他就是乙個記憶體空間的首位置。2,指標變數,位址變數 顧名思義,指標變數就是存放指標 位址 的變數。如果定義呢?short int p null 定義了乙個指標變數p,並且付給初始值為零。short int 就是型別。表示的是存放sh...
第八章 指標
1 8.3.1 指標基礎及指標運算 2 8.3.2 資料交換 3 8.3.3 字串反轉及字串連線 4 8.3.4 陣列元素奇偶排列 1 掌握指標的概念和定義方法。2 掌握指標的操作符和指標的運算。3 掌握指標與陣列的關係。4 掌握指標與字串的關係。5 熟悉指標作為函式的引數以及返回指標的函式。6 了...