糯米文學吧

位置:首頁 > 計算機 > C語言

C語言的指針類型講解

C語言3.13W

C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,下面是小編為大家整理的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指令不同。

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

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

簡要的説有以下原則:如果轉換後指針指向的數據類型大小小於原數據類型大小,那麼用該轉換後的指針訪問就不會越過原數據的內存,是安全的,否則危險,要

標籤:指針 講解 語言