<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

            C語言的指針類型解析

            時間:2025-03-20 17:40:55 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語言的指針類型解析】相關文章:

            C語言指針變量的類型07-31

            C語言的指針類型詳解05-21

            C語言的指針類型講解11-02

            C語言指針的長度和類型講解05-14

            C語言指針的長度和類型詳解10-13

            C語言中野指針的深入解析08-06

            C語言的指針10-11

            解析C語言編程中指針賦值的實例06-16

            C語言中各種類型的指針的概念10-31

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院