最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言的指針類型詳細(xì)解析

 更新時間:2013年09月18日 08:56:03   作者:  
C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,關(guān)乎于讀寫的長度,沒有存儲在指針變量中,位于用該指針讀寫時的mov指令中,不同的讀寫長度對應(yīng)的mov指令不同

指針存儲了內(nèi)存的地址,同時指針是有類型的,如int*,float*,那么,一個自然的猜想就是指針變量應(yīng)該存儲這兩方面的信息:地址和指針類型,比如,就像下面的結(jié)構(gòu)體:

復(fù)制代碼 代碼如下:

struct pointer{
    long address;
    int type;
}

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

// ma.cpp : 定義控制臺應(yīng)用程序的入口點。
#include "stdafx.h"
char gi;
char *pi;

void main()
{
pi=&gi;
*pi=12;
}


反匯編結(jié)果:
復(fù)制代碼 代碼如下:

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指令不同。

另外:在指針強(qiáng)制轉(zhuǎn)換時,也是這個原理。就是指針強(qiáng)制轉(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)存,是安全的,否則危險,要越界。

相關(guān)文章

  • C++實現(xiàn)字符格式相互轉(zhuǎn)換的示例代碼

    C++實現(xiàn)字符格式相互轉(zhuǎn)換的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C++中實現(xiàn)字符格式相互轉(zhuǎn)換的方法,主要有UTF8與string互轉(zhuǎn)、wstring與string互轉(zhuǎn),感興趣的小伙伴可以了解一下
    2022-11-11
  • 深入解析C++中的std::thread的使用

    深入解析C++中的std::thread的使用

    這篇文章主要介紹了C++中的std::thread的使用,在C++11新標(biāo)準(zhǔn)中,可以簡單通過使用thread庫,來管理多線程,本文通過實例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-04-04
  • 深入理解C語言指針及占據(jù)內(nèi)存空間

    深入理解C語言指針及占據(jù)內(nèi)存空間

    這篇文章主要介紹了C語言指針及占據(jù)內(nèi)存空間的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • C++11中的chrono庫詳解

    C++11中的chrono庫詳解

    C++11提供了日期時間相關(guān)的庫chrono,通過chrono庫可以很方便的處理日期和時間,這篇文章主要介紹了C++11中的chrono庫,需要的朋友可以參考下
    2023-03-03
  • C語言的數(shù)組指針與函數(shù)指針詳解

    C語言的數(shù)組指針與函數(shù)指針詳解

    這篇文章主要為大家詳細(xì)介紹了C語言的數(shù)組指針與函數(shù)指針,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Visual Studio 2019修改編碼UTF-8的實現(xiàn)

    Visual Studio 2019修改編碼UTF-8的實現(xiàn)

    這篇文章主要介紹了Visual Studio 2019修改編碼UTF-8的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 解決C++中重定義的方法總結(jié)

    解決C++中重定義的方法總結(jié)

    本篇文章是對C++中重定義的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 舉例講解C語言鏈接器的符號解析機(jī)制

    舉例講解C語言鏈接器的符號解析機(jī)制

    鏈接器的工作主要分為兩個階段:符號解析和重定位,符號解析的功能是將每個模塊符號引用綁定到一個確切的符號定義,這里我們就來舉例講解C語言鏈接器的符號解析機(jī)制
    2016-05-05
  • C語言實現(xiàn)簡單通訊錄功能

    C語言實現(xiàn)簡單通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)簡單通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解C語言整數(shù)和浮點數(shù)在內(nèi)存中的存儲

    詳解C語言整數(shù)和浮點數(shù)在內(nèi)存中的存儲

    這篇文章主要介紹了C語言整數(shù)和浮點數(shù)在內(nèi)存中是如何存儲的,文中有詳細(xì)的代碼示例供大家參考,對大家了解學(xué)習(xí)C語言整數(shù)和浮點數(shù)在內(nèi)存中的存儲有一定的幫助,需要的朋友可以參考下
    2024-03-03

最新評論

长治市| 三明市| 崇州市| 新源县| 武胜县| 青冈县| 诏安县| 额尔古纳市| 富阳市| 土默特右旗| 介休市| 和林格尔县| 安庆市| 沂南县| 临洮县| 辽源市| 邹城市| 湖北省| 江达县| 吉首市| 宜丰县| 余干县| 嫩江县| 徐闻县| 海兴县| 南川市| 英德市| 白银市| 华阴市| 阳原县| 临西县| 贡觉县| 都匀市| 炎陵县| 林芝县| 全椒县| 平乐县| 仁化县| 舞钢市| 南靖县| 尼木县|