指標是個what

2021-10-05 17:49:20 字數 1963 閱讀 6631

第一次寫這個東東有點小激動

話不多說,上知識

計算機中所有的資料都必須放在記憶體中,不同型別的資料占用的位元組數不一樣,例如 int 占用4個位元組(4個位元組編號),char 占用1個位元組(1個位元組編號),指標占用4個位元組(4個位元組編號)。為了正確地訪問這些資料,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以準確地找到某個位元組,而這個位元組的編號我們通常稱之為位址。

大概就是這個鬼東東:

bit:計算機的記憶體便是由數以億萬計的位(bit)組成,每個位的容納值為0或1

byte:位元組,乙個位元組包含8個位(bit)

如果我們在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元,從而它在記憶體中就有了位址,位址中存的資料就是賦給變數的值。

而這個變數的位址,我們就稱為該變數的「指標」

指標變數和其他變數一樣,只要定義了,它在記憶體中就有了位址

只不過它位址存的東西與其它變數的位址不一樣,它位址裡存的還是位址,有點套娃的意思哈,初始化化的指標(賦位址)存放的是其它變數的位址,可以是普通變數,也可以是指標變數。

也就是說如果乙個變數專門用來存放另乙個變數的位址(即指標),則它稱為「指標變數」。

基型別 *指標變數

例如:int *p ;char *p;

注意:指標變數是p不是『*p』,『*只是『表示該變數的型別為指標型別的變數

還有就是給指標賦值基型別要一致

比如:

float a;

int *p;

p=&a;

這個就不對

&a表示變數a所佔據的記憶體空間的首位址。

*p表示指標變數p所指向的記憶體中的資料。

那考慮一下:

*(&a)=?

話不多說,上圖

由此可以看出來

*(取值運算子)與&(取位址運算子)為互逆運算

在這一定要注意這2種寫法:

int *p;

p=10010 ; //報錯

那這是為什麼呢?

這裡指標變數只能存放位址(指標),不能將乙個整數(或其他非位址型別的資料)賦給乙個指標變數。

這麼說吧,這樣賦的話會有安全問題,第一種寫法就相當於你自己給指標寫乙個位址給它,至於這個位址存了什麼東西你不知道,可能是系統不能碰的資料,如果你賦給它,又改了其中的資料,可能你的電腦就會系統崩潰。這寫法編譯器不認。

int x=28;

printf(「%d」,&(*x)); //報錯

這種寫法與上面差不多

*x的意思就是把x=28當成了位址,那和上面一樣,相當於你直接給x寫了個位址,編譯器不認。

面對指標我們應該

第一次寫,將就著看,不對望指正哈,預知後事如何,請聽下回分解

What 什麼是API函式

說一群劫匪搶了我的一塊寶石,要我拿1w 硬幣去贖回 我 行吧,你們住 我送過去?劫匪 不行,你知道我的住處,我們的安全就沒辦法保證了。而且這裡地形不好,你來了會迷路的。這樣吧,我在一顆百年大樹放一紅一藍兩個箱子,早上你把硬幣c放紅箱,晚上你來藍箱裡面自然有你的寶石 我 沒問題,就這麼定了 作業系統就...

函式指標是乙個高階主題

快速的回顧 始終使用括號來消除操作者優先如果有任何問題或機會的混亂。算術運算子,所有的工作就像他們在正常的數學。彈性模量 運算元從整數除法返回餘數。當心 捨入或符號錯誤時的整數的除法和取模運算元是負的。遞增和遞減運算子可以用來方便地增加或減少數。小心 特別是當它涉及到函式引數的求值順序。關係運算子可...

什麼是指標?

int p,在32 位的編譯器下,指標都是 4個位元組。指標身為變數,當然也可以進行正常的加減,但是它與普通變數的運算不同的是,指標的加減所加所減的是指標所指向的型別,比如下面這個例子 include 關於指標型別的加減 pa n pa sizeof 指標所指向的型別 nint main 為取位址符...