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指令不同。
另外:在指針強制轉換時,也是這個原理。就是指針強制轉換的影響不是在轉換的時候發生,而是在用轉換後的身份去訪問內存時體現到了指令中。
那麼指針在什麼情況下轉換是安全的呢?就是看用這個轉換後的身份去訪問內存是否安全。
簡要的説有以下原則:如果轉換後指針指向的數據類型大小小於原數據類型大小,那麼用該轉換後的指針訪問就不會越過原數據的內存,是安全的,否則危險,要
-
2017年3月計算機二級C語言考試摸底測試題
以下是yjbys考試網小編整理的2017年3月計算機二級C語言考試摸底測試題,希望對大家有所幫助,祝大家計算機二級考試順利通過。一、選擇題(每小題1分。)(1)程序流程圖中帶有箭頭的線段表示的是()。A.圖元關係B.數據流C.控制流D.調用關係(2)結構化程序設計的基本原則...
-
C語言if else語句彙總
對於很多情況,順序結構的代碼是遠遠不夠的,大家都接觸過C語言吧,下面是小編為大家整理的C語言ifelse語句,希望對大家有所幫助。C語言ifelse語句在C語言中,使用if和else關鍵字對條件進行判斷。請先看下面的代碼:#includeintmain(){intage;printf("請輸入你的年齡:");sc...
-
C語言精選面試題詳解
C語言是IT編程中最基礎的語言,在面試中,基本可以忽略又或者格外重要。下面是小編為大家整理的C語言精選面試題詳解,歡迎參考~分析這些面試題,本身包含很強的趣味性;而作為一名研發人員,通過對這些面試題的深入剖析則可進一步增強自身的內功。試題1:以下是引用片段:voi...
-
2017年計算機二級考試C語言備考題及答案
計算機二級對於很多考生來説還是比較有難度的,那麼怎樣順利通過二級考試呢?這就需要大家平時多練習和找方法了。以下是本站小編整理的2017年計算機二級考試C語言備考題及答案,希望對大家有幫助!1.(A)是構成C語言程序的基本單位。A、函數B、過程C、子程序D、子例...