Day 11 指標初學

2021-08-21 20:16:51 字數 3984 閱讀 1242

指標的概念

計算機中所有的資料都必須放在記憶體中,不同型別的資料占用的位元組數不一樣,例如

int 占用4

個位元組,

char 占用1

個位元組。為了正確地訪問這些資料,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以準確地找到某個位元組

我們將記憶體中位元組的編號稱為位址address)或指標pointer)(即位址就是指標。位址從

0 開始依次增加,對於

32 位環境,程式能夠使用的記憶體為

4gb,最小的位址為

0,最大的位址為

0xffffffff。

一切都是位址

c語言用變數來儲存資料,用函式來定義一段可以重複使用的**,它們最終都要放到記憶體中才能供

cpu

使用。資料和**都以二進位制的形式儲存在記憶體中,計算機無法從格式上區分某塊記憶體到底儲存的是資料還是**。當程式被載入到記憶體後,作業系統會給不同的記憶體塊指定不同的許可權,擁有讀取和執行許可權的記憶體塊就是**,而擁有讀取和寫入許可權(也可能只有讀取許可權)的記憶體塊就是資料

cpu只能通過位址來取得記憶體中的**和資料

,程式在執行過程中會告知

cpu

要執行的**以及要讀寫的資料的位址。cpu訪問記憶體時需要的是位址,而不是變數名和函式名!變數名和函式名只是位址的一種助記符

。編譯和鏈結過程的一項重要任務就是

找到這些名稱所對應的位址。

注意:雖然變數名、函式名、字串名和陣列名在本質上是一樣的,它們都是位址的助記符,但在編寫**的過程中我們認為(1變數名表示的是資料本身,而2函式名字串名和陣列名表示的是**塊或資料塊的

首位址。

指標變數的概念

資料在記憶體中的位址也稱為指標,如果乙個變數儲存了乙份資料的指標,我們就稱它為指標變數

例如:假設有乙個

char

型別的變數

c,它儲存了字元

'k'(

ascii

碼為十進位制數

75),並占用了位址為

0x11a

的記憶體(位址通常用十六進製制表示)。另外有乙個指標變數

p,它的值為

0x11a

,正好等於變數

c 的位址,這種情況我們就稱

p指向了c,或者說

p 是指向變數

c 的指

指標變數的定義

定義指標變數與定義普通變數非常類似,不過要在變數名前面加星號

*,格式為:

資料型別*變數名;

資料型別*變數名=;

*表示這是乙個指標變數該變數存放的是乙個資料的位址資料型別表示該指標變數

所指向位址記憶體的資料型別。

和普通變數一樣,指標變數也可以被多次寫入,如: //

定義普通變數

float a = 99.5, b = 10.6;

char c = '@', d = '#'; //

定義指標變數

float *p1 = &a;

char *p2 = &c; //

修改指標變數的值

p1 = &b;

p2 = &d; *

是乙個特殊符號,表明乙個變數是指標變數,定義p1、

p2 時必須帶

*。而給p1、

p2 賦值時,因為已經知道了它是乙個指標變數,就沒必要多此一舉再帶上

*,後邊可以像使用普通變數一樣來使用指標變數。也就是說,定義指標變數時必須帶*,給指標變數賦值時不帶*

假設變數a、

b、c、

d 的位址分別為

0x1000

、0x1004

、0x2000

、0x2004

,下面的示意圖很好地反映了p1、

p2 指向的變化:

需要強調的是

p1p2的型別分別是float*char*

而不是float

和char

,它們是完全不同的資料型別

要引起注意。

*pointer;        //這裡的*稱為指標運算子,用來取得某個位址上的資料

如:int x = 10;

int y = 20;

int *px = &x;

int *py = &y;

y = *px + 5;   //

表示把x

的內容加

5並賦給y,

*px+5

相當於(*px)+5

y = ++*px;    //px

的內容加上

1之後賦給y,

++*px

相當於++(*px)

y = *px++;    //

相當於y=*(px++)

py = px;        //

把乙個指標的值賦給另乙個指標

手機衛士day11

系統程序顯示和隱藏 建立程序管理設定頁面 processmanagersettingactivity 編寫設定頁面布局檔案 監聽checkbox的勾選事件,更新本地sharepreference 根據本地記錄,更新checkbox狀態 boolean showsystem mprefs.getboo...

實習日記 Day11

滴 今日份心得總結卡 今日最大心得其實應該是,穿一條薄褲子還露腳踝的我怕是失了智,早上腿差點都凍僵了 1.不要從別人身上尋求安心 做好自己,降低對人際關係的預期。果然,邊際遞減效應 應驗了,上週還覺得和諧無比的同事 師徒關係,這週就開始覺察到距離感。我曾以為我的認真工作和順利完成任務能得到上司或者師...

區間合併 day 11

區間合併 問題 給定 n 個區間 li,ri 要求合併所有有交集的區間。注意如果在端點處相交,也算有交集。輸出合併完成後的區間個數。例如 1,3 和 2,6 可以合併為乙個區間 1,6 輸入格式 第一行包含整數n。接下來n行,每行包含兩個整數 l 和 r。輸出格式 共一行,包含乙個整數,表示合併區間...