隨堂筆記 指標變數

2021-07-02 16:55:08 字數 1638 閱讀 3071

在32位的平台下,最大記憶體為4g,這些記憶體被分為n個位元組,而每個位元組都對應著唯一的整數編號,這個整數編號稱為位址,4g大小的記憶體,編號從0到4g-1。同時位址也稱為指標。

指標變數就是用來記錄位址資料,如果乙個指標變數中記錄了乙個儲存區的位址則可以使用這個指標變數找到那個儲存區。

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。

指標變數也分型別,不同型別的指標適合與不同儲存區**。

從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別。

讓我們看看以下例子中各個指標的型別和指標所指向的型別:

(1)int *p_num; //指標的型別是int *,指的型別是int

(2)char *p_c; //指標的型別是char *,指的型別是char

(3)int **pp_num; //指標的型別是 int **,指的型別是int *,是乙個2級指標

(4)int (*p)[3]; //指標的型別是 int(*)[3],指向的型別是int,指向乙個整型陣列                               的指標

(5)int *(*p_arr)[4]; //指標的型別是 int *(*)[4],指向的型別是int*,指向乙個                                         指標陣列的指標

(6)int (*func)(void);//指標的型別是int (*)();指向的是int(),指向乙個函式的指標

在上述例子中,指標所指向的型別已經有了,但由於指標還未初始化,所以它所指向的記憶體區是不存在的,或者說是無意義的。

當我們宣告乙個指標變數的時候,如果沒有給指標**乙個儲存區,那指標會隨機**乙個儲存區,這樣的做法很危險,會帶來不可預料的後果。所以宣告乙個指標變數的時候必須給指標變數**乙個儲存區,或者讓它成為乙個空指標(空指標裡面記錄記錄空位址(null),這個位址數值就是0)。

指標的值

指標的值,或者叫指標所儲存的記憶體位址編號。

指標的值是指標本身儲存的值,這個值將被編譯器當作乙個位址,而不是乙個一般的值。在32位程式裡,所有型別的指標的值都是乙個32位整數,因為32位程式裡記憶體位址全都是32位長。

指標所指向的記憶體區就是從指標的值所代表的那個記憶體位址開始,長sizeof(指標所指向的型別)的一片記憶體區。以後,我們說乙個指標的值是xx,就相當於說該指標指向了以xx為首位址的一片記憶體區域;我們說乙個指標指向了某塊記憶體區域,就相當於說該指標的值是這塊記憶體區域的首位址。

指標所指向的記憶體區和指標所指向的型別是兩個完全不同的概念。

指標本身佔了多大的記憶體?你只要用函式sizeof(指標的型別)測一下就知道了。在32位平台裡,指標本身佔據了4個位元組的長度。

指標本身佔據的記憶體這個概念在判斷乙個指標表示式是否是左值時很有用。

位址資料可以進行如下計算

位址 + 整數            位址 - 整數              位址 - 位址

位址資料加減整數n事實上加減的是n個**位址的資料型別的大小。位址之間做減法結果是乙個整數,這個整數代表兩個位址之間包含的**儲存區個數。

由於時間問題,指標使用,指標的詳解筆記,過2天再整理。

上課隨堂筆記

運算子有一元 二元和三元運算子。分類 一元二元和三元 乙個數兩個數三個數 按優先順序 運算方向分 a b c 從左向右 從右向左 賦值運算子為 方向 從右向左 優先順序 最低 let a b c d 5 先算右 注意 左側只能有乙個常量或變數 求餘 自加自減!不能用於常量只能用於變數 1 var a...

18 7 19隨堂筆記

配置vimrc vim etc vimrc 1.set autoindent 的意思是自動縮排 2.set tabstop 4 的意思是插入模式下按下 tab 後游標則向後退4格。3.set number 的意思是設定行號。也可低行模式下 set nu set nonu 設定 取消設定 4.synt...

Liunx隨堂筆記

變換目錄 cd 顯示當前所在目錄 pwd 建立新目錄 mkdir 刪除 空 的目錄 rmdir 檔案與目錄的顯示 ls 複製檔案或目錄 cp 移除檔案或目錄 rm 移動檔案與目錄,或更名 mv 取得路徑的檔名與目錄名 basename,dirname 由第一行開始顯示檔案內容 cat 只看頭幾行 h...