- 相關(guān)推薦
C語言的指針類型講解
C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,下面是小編為大家整理的C語言的指針類型講解,歡迎參考~
指針存儲了內(nèi)存的地址,同時指針是有類型的,如int*,float*,那么,一個自然的猜想就是指針變量應(yīng)該存儲這兩方面的信息:地址和指針類型,比如,就像下面的結(jié)構(gòu)體:
代碼如下:
struct pointer{
long address;
int type;
}
舉個例子:打印sizeof(int*),值為4,可見4字節(jié)是存儲內(nèi)存地址用的,反過來就說明指針并沒有存儲類型信息的地方,那么指針的類型信息存放在哪兒呢?
下面剖析一段簡單的代碼。
代碼如下:
// ma.cpp : 定義控制臺應(yīng)用程序的入口點。
#include "stdafx.h"
char gi;
char *pi;
void main()
{
pi=&gi;
*pi=12;
}
反匯編結(jié)果:
代碼如下:
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就說明了指針類型的信息。
總結(jié):C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,關(guān)乎于讀寫的長度,沒有存儲在指針變量中,位于用該指針讀寫時的mov指令中,不同的讀寫長度對應(yīng)的mov指令不同。
另外:在指針強制轉(zhuǎn)換時,也是這個原理。就是指針強制轉(zhuǎn)換的影響不是在轉(zhuǎn)換的時候發(fā)生,而是在用轉(zhuǎn)換后的身份去訪問內(nèi)存時體現(xiàn)到了指令中。
那么指針在什么情況下轉(zhuǎn)換是安全的呢?就是看用這個轉(zhuǎn)換后的身份去訪問內(nèi)存是否安全。
簡要的說有以下原則:如果轉(zhuǎn)換后指針指向的數(shù)據(jù)類型大小小于原數(shù)據(jù)類型大小,那么用該轉(zhuǎn)換后的指針訪問就不會越過原數(shù)據(jù)的內(nèi)存,是安全的,否則危險,要
【C語言的指針類型講解】相關(guān)文章:
C語言的指針類型詳解05-21
C語言指針的概念08-20
如何理解C語言指針05-19
C語言中的指針是什么08-08
如何使用C語言數(shù)組指針09-14
C語言復雜指針是什么08-15
C語言中指針的概念03-16
C語言指針知識點10-10