C語言篇 13 指標 大端和小端 程序空間

2022-08-03 09:09:14 字數 2115 閱讀 7492

指標就是位址,指向了記憶體中的乙個位置。

位址是記憶體的乙個編號,記憶體中的乙個位元組就有乙個編號,這個編號就是這個位元組的位址。

1bytes(位元組)= 8bits(二進位制)

儲存指標(位址)的變數。我們經常將指標變數直接叫指標。

指標是引用資料型別,因為本身沒有儲存資料,只是儲存了資料的位址,間接的找到記憶體中的資料。

值傳遞:函式的引數不是指標,呼叫這個函式傳引數時相當於賦值。

基本資料型別作為函式的引數是值傳遞, 在函式中修改形參的值不會影響到外面實參的值。

位址傳遞:函式的引數是乙個指標,呼叫這個函式時需要傳的是位址。

陣列/指標作為函式的引數是位址傳遞, 如果是位址傳遞在函式中修改形參的值會影響到外面實參的值。

(1)占用記憶體空間

陣列占用空間 = 陣列元素占用的空間*長度

指標占用空間 = 在64位系統下,8個位元組,固定的,與指標的型別沒有關係

(2)賦值

陣列名是常量,不可以修改其值;

指標是變數,可以多次賦值(對指標賦值,本質上是指標指向的改變)

陣列的本質:

陣列做為引數傳遞:

陣列可以做函式的返回值嗎?

函式是不可以返回陣列型別的。乙個函式的返回值型別不可能出現xx,但可以返回指標。

由於計算機cpu的架構設計不同,乙個整數有記憶體中存放的位元組序列也不一樣。

小端:一般的x86都是小端,乙個整數的位元組會倒序存放在記憶體中。比如int型的變數有4個位元組,第4個位元組會放在開始位置。

大端:正好和小端相反,乙個整數的位元組會順序存放在記憶體中,和存放字串是一樣的。solaris基本是大端的。

整數在記憶體中儲存時,不同的計算機(主要是cpu)會有不同的儲存方式:

程式: 儲存在磁碟(外存)中的乙個可以執行的檔案。(在外存)

程序: 正在執行的程式。先從磁碟調入到記憶體中,再執行。(在記憶體)

乙個程序占用的記憶體空間可以分為以下區域:

一、**區(正文段,text)

存放需要執行的**(二進位制**和字串常量)。最大特點是:唯讀。對此區域的修改直接會導致程式崩潰。

二、全域性區(靜態全域性區)

存放全域性變數和靜態變數的。可讀寫,在程式執行期間,空間不會被釋放。

bss段:屬於全域性區,存放沒有初始化過的全域性變數。程式執行前,該區域會自動清0。

三、堆區(自由區heap)

程式設計師自由分配空間和釋放空間。動態分配記憶體空間。可讀寫。

說明:申請分配空間:malloc、remalloc、oc中(alloc、init、new)

釋放空間:free、delete、oc中(release)

四、棧區(stack)

存放區域性變數(自動變數),記憶體空間的分配和釋放是自動的,不受程式設計師的控制。可讀寫。

不要訪問野指標(沒有賦值的指標, 我們稱之為野指標)

c語言基礎(二)指標篇

定義乙個int型別的變數i int i 10 定義乙個int型別的一級指標變數 int p 把i對應的位址賦給p變數 p i 指標取值 p 把p變數對應的位址的值取出來 printf p d p 首先我們定義的指標變數p,其實p就是用來存放位址的,我們把i的位址賦給p,那麼p的值其實就是i的位址,p...

C語言(八) 指標(2)陣列和指標

函式引數表中的陣列實際上是指標 int main int argc,char argv int min,max printf main sizeof a lu n sizeof a minmax a,sizeof a sizeof a 0 min,max printf min d n min pri...

c語言學習日記 大端和小端

大端模式 big dndian 和小端模式 little indian 大端模式和小端模式是計算機採用位元組儲存機制的兩種方式 兩種位元組類 首先我們要知道位元組序是什麼?位元組的順序就是位元組序。big endian 是指高位位元組排放在記憶體的低位址端,低位位元組排放在記憶體的高位址端.litt...