(十三)指標 1 將位址作為資料值

2021-10-09 07:53:20 字數 1475 閱讀 7874

在c語言中,指標的主要用途,包括:

(1) 允許以更簡潔的方式引用大的資料結構

資料結構總是位於計算機的記憶體中,因此必然存在位址。

乙個記憶體位址在內部表示為乙個整數,因此,利用指標,可以使用位址作為乙個完整值的速記符號。

當資料結構本身很大時,該策略能節約大量記憶體空間。

(2) 使程式的不同部分能共享資料

如將某乙個資料值的位址從乙個函式傳遞到另乙個函式,這兩個函式就能使用同一資料。

(3) 能在程式執行過程中預留新的記憶體空間

在程式中能使用的記憶體,可以是通過顯式宣告分配給變數的記憶體。

若程式能在執行時獲得新的記憶體空間,並讓指標指向這一記憶體則更為方便。

(4) 可用來記錄資料項之間的關係

在高階程式設計應用中,指標被廣泛用於構造單個資料值之間的聯絡。

如,通常在第乙個資料的內部表示中包含指向下乙個資料項的指標,來說明這兩個資料項之間有概念上的順序關係。

其中,左值開頭的l表示,在c語言中左值可以出現在賦值語句的左邊。

如,簡單變數就是左值,語句如下:

x = 1.0;
四條原則:

(1) 每個左值都儲存在記憶體中,因此必有位址。

(2) 一旦宣告左值,儘管左值的內容可以改變,但它的位址永遠不能改變。

(3) 按照所儲存的資料型別,不同左值需要不同大小的記憶體。

(4) 左值的位址本身也是資料,也能在記憶體進行操作和儲存。

其中,第(4)條原則可以更好地討論指標。

為了更好地進行說明,考慮這樣乙個宣告:

int i ;
該宣告為整數i在記憶體的某處保留了乙個儲存空間。

例如,如果在執行程式的計算機上儲存整數需要四個位元組的空間,那麼變數i可能會得到從1000~1003的位置。如下圖陰影部分所示:

根據第(4)條原則,和變數i相關的位址1000本身也是乙個資料值,可以存入記憶體。

它在記憶體中的儲存方式和其他整型數一樣。比如,可以把變數i的位址存入下乙個記憶體字中,即位址1004~1007的位元組。

出現在位址1004的值1000可以用來指向存放在陰影部分的變數i的位址。

為了強調諸如位置在1004的位址和位置在1000的變數i之間的關係,常在記憶體圖上畫上箭頭(如下圖所示)。

位址1004裡的字只是包含了與數值1000對應的位串。同樣的位串作為整數使用還是作為位址使用取決於變數在程式中是怎樣宣告的。

如果將變數宣告為指標,就可以把存放在位置1004的值1000理解成記憶體中變數i的位址,並使用指標檢索或操作i的值。

參考《c語言的科學和藝術》 —— 13 指標

指標位址作為引數傳遞

在做gpu cuda 高效能計算時遇到乙個問題 host 中分配的gpu變數怎麼在 host 間傳遞。其實這轉換過來是乙個函式間指標型變數的傳參問題。指標本身也是乙個變數,裡邊儲存的是位址,如果需要在函式間傳遞可修改自身位址的指標 指標型變數 那麼有兩種方法實現。取該指標的位址,作為乙個新的指標傳遞...

將函式名 位址 作為引數傳遞

include int add int a,int b int aaa int a,int b,int p int,int 注意定義的函式指標 int main int a 1,b 2 printf d aaa a,b,add 將函式名 函式位址 作為引數 return 0 給上面乙個程式,其中最主...

c 用指標將函式作為引數傳參

今天發現了一種寫法,順便記錄一下。廢話不多說,先看 include using namespace std int addition int x,int y int subtraction int x,int y int operation int x,int y,int function int,...