當前位置:才華齋>計算機>C語言>

C語言的指標型別詳解

C語言 閱讀(2.43W)

C語言的指標型別包括兩方面的資訊:一是地址,存放在指標變數中;二是型別資訊,關乎於讀寫的長度,沒有儲存在指標變數中,位於用該指標讀寫時的mov指令中,不同的讀寫長度對應的mov指令不同。以下是本站小編搜尋整理的關於C語言的.指標型別詳解,需要的朋友可以參考一下!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

C語言的指標型別詳解

指標儲存了記憶體的地址,同時指標是有型別的,如int*,float*,那麼,一個自然的猜想就是指標變數應該儲存這兩方面的資訊:地址和指標型別,比如,就像下面的結構體:

程式碼如下:

struct pointer{

long address;

int type;

}

舉個例子:列印sizeof(int*),值為4,可見4位元組是儲存記憶體地址用的,反過來就說明指標並沒有儲存型別資訊的地方,那麼指標的型別資訊存放在哪兒呢?

  下面剖析一段簡單的程式碼。

程式碼如下:

// : 定義控制檯應用程式的入口點。

#include "stdafx.h"

char gi;

char *pi;

void main()

{

pi=&gi;

*pi=12;

}

  反彙編結果:

程式碼如下:

pi=&gi;

0041137E C7 05 78 71 41 00 7C 71 41 00 mov dword ptr [pi (417178h)],offset gi (41717Ch)

*pi=12;

00411388 A1 78 71 41 00 mov eax,dword ptr [pi (417178h)]

0041138D C6 00 0C mov byte ptr [eax],0Ch

}

  可見byte就說明了指標型別的資訊。

  總結:C語言的指標型別包括兩方面的資訊:一是地址,存放在指標變數中;二是型別資訊,關乎於讀寫的長度,沒有儲存在指標變數中,位於用該指標讀寫時的mov指令中,不同的讀寫長度對應的mov指令不同。

  另外:在指標強制轉換時,也是這個原理。就是指標強制轉換的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問記憶體時體現到了指令中。

  那麼指標在什麼情況下轉換是安全的呢?就是看用這個轉換後的身份去訪問記憶體是否安全。

  簡要的說有以下原則:如果轉換後指標指向的資料型別大小小於原資料型別大小,那麼用該轉換後的指標訪問就不會越過原資料的記憶體,是安全的,否則危險,要越界。