指標就是位址,指向了記憶體中的乙個位置。
位址是記憶體的乙個編號,記憶體中的乙個位元組就有乙個編號,這個編號就是這個位元組的位址。
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...