国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

關于C語言的指針類型

2020-02-24 14:26:08
字體:
來源:轉載
供稿:網友

C語言指針是一個非常重要的存在,但是我們在學習C語言的時候可以知道有好幾種指針類型,因此許多小伙伴們都不太了解C語言的指針類型,那么我們現在就去看看關于C語言的指針類型的內容吧。

指針存儲了內存的地址,同時指針是有類型的,如int*,float*,那么,一個自然的猜想就是指針變量應該存儲這兩方面的信息:地址和指針類型,比如,就像下面的結構體:

?

struct pointer{
??? long address;
??? int type;
}


舉個例子:打印sizeof(int*),值為4,可見4字節是存儲內存地址用的,反過來就說明指針并沒有存儲類型信息的地方,那么指針的類型信息存放在哪兒呢?
下面剖析一段簡單的代碼。

?

?

?


// ma.cpp : 定義控制臺應用程序的入口點。
#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指令不同。

?

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

那么指針在什么情況下轉換是安全的呢?就是看用這個轉換后的身份去訪問內存是否安全。簡要的說有以下原則:如果轉換后指針指向的數據類型大小小于原數據類型大小,那么用該轉換后的指針訪問就不會越過原數據的內存,是安全的,否則危險,要越界。

上文中小編為大家詳細介紹了關于C語言的指針類型的內容,由于精力有限,歡迎指出文中錯誤與不足,共勉之!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 景洪市| 鹤峰县| 阜康市| 桐梓县| 松溪县| 来宾市| 独山县| 西安市| 启东市| 松阳县| 清流县| 云林县| 夏津县| 万源市| 砀山县| 莲花县| 剑阁县| 深泽县| 利川市| 洱源县| 稻城县| 江都市| 岳普湖县| 西安市| 通州区| 安西县| 桐柏县| 广丰县| 永胜县| 阿坝县| 双流县| 泸定县| 营山县| 广丰县| 汾西县| 双江| 新竹县| 石屏县| 玉门市| 沐川县| 平塘县|