100165349.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 260 行 · 第 1/3 页

HTM
260
字号
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">pByte: 1243328</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">pDouble: 1243320</span></p>
<p class="MsoToc1" style="LINE-HEIGHT: 17pt"><span style="FONT-FAMILY: 宋体">执行这段代码后:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">++pUint;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // adds (1*4)= 4 bytes to pUint</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; LINE-HEIGHT: 15pt; FTEL: 18.45pt"><span lang="EN-US">pByte</span><span style="FONT-FAMILY: 宋体">&ndash;</span><span lang="EN-US">= 3;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;// subtracts (3*1)=3 bytes from pByte</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="FR">double* pDouble2 = pDouble + 4; // pDouble2 = pDouble + 32 bytes (4*8 bytes)</span></p>
<p class="MsoNormal" style="LINE-HEIGHT: 17pt"><span style="FONT-FAMILY: 宋体">指针应包含的内容是:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">pUint: 1243336</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">pByte: 1243325</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US">pDouble2: 1243352</span></p>
<p class="a3" style="MARGIN-TOP: 8.15pt; FTEL: 21.45pt"><span style="FONT-FAMILY: 黑体">提示:</span></p>
<p class="a1" style="FTEL: 21.45pt"><span style="FONT-FAMILY: 楷体_GB2312">给类型为</span><span lang="EN-US">T</span><span style="FONT-FAMILY: 楷体_GB2312">的指针加上</span><span lang="EN-US">X</span><span style="FONT-FAMILY: 楷体_GB2312">,其中</span><span lang="EN-US">X</span><span style="FONT-FAMILY: 楷体_GB2312">的值为</span><span lang="EN-US">P</span><span style="FONT-FAMILY: 楷体_GB2312">,则得到的结果是</span><span lang="EN-US">P + X*(sizeof(T))</span><span style="FONT-FAMILY: 楷体_GB2312">。</span></p>
<p class="a3" style="MARGIN-TOP: 8.15pt; FTEL: 21.45pt"><span style="FONT-FAMILY: 黑体">注意:</span></p>
<p class="a1" style="FTEL: 21.45pt"><span style="FONT-FAMILY: 楷体_GB2312">使用这个规则时要小心。如果给定类型的连续值存储在连续的存储单元中,指针加法就允许在存储单元中移动。但如果类型是</span><span lang="EN-US">byte</span><span style="FONT-FAMILY: 楷体_GB2312">或</span><span lang="EN-US">char</span><span style="FONT-FAMILY: 楷体_GB2312">,其总字节数就不是</span><span lang="EN-US">4</span><span style="FONT-FAMILY: 楷体_GB2312">的倍数,在默认情况下,连续值就不是默认地存储在连续的存储单元中。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果两个指针都指向相同的数据类型,也可以把一个指针从另一个指针中减去。此时,结果是一个</span><span lang="EN-US">long</span><span style="FONT-FAMILY: 宋体">,其值是指针值的差被该数据类型所占用的字节数整除的结果:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">double* pD1 = (double*)1243324;&nbsp;&nbsp; &nbsp;&nbsp;// note that it is perfectly valid to </span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// initialize a pointer like this.</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">double* pD2 = (double*)1243300;</span></p>
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">long L = pD1-pD2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // gives the result 3 (=24/sizeof(double))</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">7.</span><span lang="EN-US" style="FONT-FAMILY: 宋体"> </span><span lang="EN-US">sizeof</span><span style="FONT-FAMILY: 黑体">运算符</span></h4>
<p class="MsoNormal"><a ftel="sizeof"><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">在这一节中,将介绍如何确定各种数据类型的大小。如果需要在代码中使用类型的大小,就可以使用</span><span lang="EN-US" style="LETTER-SPACING: 0.1pt">sizeof</span></a><span style="FONT-FAMILY: 宋体; LETTER-SPACING: 0.1pt">运算符,它的参数是数据类型的名称,返回该类型占用的字节数。例如:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">int x = sizeof(double);</span></p>
<p class="MsoNormal" style="FTEL: 0cm"><span style="FONT-FAMILY: 宋体">这将设置</span><span lang="EN-US">x</span><span style="FONT-FAMILY: 宋体">的值为</span><span lang="EN-US">8</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">使用</span><span lang="EN-US">sizeof</span><span style="FONT-FAMILY: 宋体">的优点是不必在代码中硬编码数据类型的大小,使代码的移植性更强。对于预定义的数据类型,</span><span lang="EN-US">sizeof</span><span style="FONT-FAMILY: 宋体">返回表</span><span lang="EN-US">7-1</span><span style="FONT-FAMILY: 宋体">所示的值。</span></p>
<p class="a5" style="MARGIN-TOP: 8.15pt"><span style="FONT-FAMILY: 黑体">表</span><span lang="EN-US">&nbsp; 7-1</span></p>
<div align="center">
<table class="MsoNormalTable" style="BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-COLLAPSE: collapse; BORDER-BOTTOM-STYLE: none" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; BORDER-LEFT-WIDTH: 1pt; BORDER-LEFT-COLOR: windowtext; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(sbyte) = 1;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(byte) = 1;</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(short) = 2;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(ushort) = 2;</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(int) = 4;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(uint) = 4;</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(long) = 8;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(ulong) = 8;</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(char) = 2;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(float) = 4;</span></p>
            </td>
        </tr>
        <tr>
            <td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 179.3pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT-STYLE: none" valign="top" width="239">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(double) = 8;</span></p>
            </td>
            <td style="PADDING-RIGHT: 9.9pt; PADDING-LEFT: 9.9pt; PADDING-BOTTOM: 1.4pt; WIDTH: 252.65pt; BORDER-TOP-STYLE: none; PADDING-TOP: 1.4pt; BORDER-BOTTOM: windowtext 1pt solid; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none" valign="top" width="337">
            <p class="a4" style="MARGIN-LEFT: 10.7pt"><span lang="EN-US">sizeof(bool) = 1;</span></p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p class="MsoNormal" style="MARGIN-TOP: 8.15pt"><span style="FONT-FAMILY: 宋体">也可以对自己定义的结构使用</span><span lang="EN-US">sizeof</span><span style="FONT-FAMILY: 宋体">,但此时得到的结果取决于结构中的字段。不能对类使用</span><span lang="EN-US">sizeof</span><span style="FONT-FAMILY: 宋体">。它只能用于不安全的代码块。</span></p>
<h4 style="FTEL: 21.45pt"><span lang="EN-US">8. </span><span style="FONT-FAMILY: 黑体">结构指针:指针成员访问运算符</span></h4>
<p class="MsoNormal"><a ftel="pointersstructs"><span style="FONT-FAMILY: 宋体">结构指针的工作方式与预定义值类型的指针的工作方式是一样的。但是这有一个条件:结构不能包含任何引用类型,这是因为前面介绍的一个限制<span style="LETTER-SPACING: -1pt">&mdash;&mdash;</span></span> </a><span style="FONT-FAMILY: 宋体">指针不能指向任何引用类型。为了避免这种情况,如果创建一个指针,它指向包含引用类型的结构,编译器就会标记一个错误。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">假定定义了如下结构:</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">struct MyStruct</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; public long X;</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">&nbsp;&nbsp; public float F;</span></p>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?