⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointerandarray.html

📁 关于 C++ 的历史无须我来介绍了
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">

  
  <link rel="stylesheet" href="css/print.css" type="text/css">

  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">

  
  <title>指标与阵列</title>
</head>


<body>

<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>

<h1><a href="file:///D:/Documents/WikiPackage/Gossip/CppGossip/CppGossip.html">C++
Gossip:&nbsp;指标与阵列</a></h1>

在宣告一个阵列之后,阵列名称用来参考至阵列的第一个元素的记忆体位址,例如在下面的程式中将指出,阵列arr与&amp;arr[0]所指向的
位置是相同的: <br>

<br>

<pre>#include &lt;iostream&gt; <br>using namespace std; <br><br>int main() { <br>    int arr[10] = {0}; <br>    cout &lt;&lt; "arr :\t\t" &lt;&lt; arr <br>         &lt;&lt; endl; <br>    cout &lt;&lt; "&amp;arr[0]: \t" &lt;&lt; &amp;arr[0] <br>         &lt;&lt; endl; <br><br>    return 0; <br>}</pre>

<br>

<span class="postbody">
执行结果:</span><br>

<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">

  <tbody>

    <tr>

      <td style="background-color: rgb(0, 0, 0);"><small><span style="color: rgb(255, 255, 255);">arr
:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;0x22ff40<br>

&amp;arr[0]:&nbsp;&nbsp;&nbsp;&nbsp; 0x22ff40</span></small><span style="color: rgb(255, 255, 255);"><br>

      </span></td>

    </tr>

  
  </tbody>
</table>

<br>

之前也曾经讨论过,阵列的索引其实是相对于第一个记忆体位址的位移量,下面这个程式也可以印证这个事实: <br>

在宣告一个阵列之后,阵列名称用来参考至阵列的第一个元素的记忆体位址,例如在下面的程式中将指出,阵列arr与&amp;arr[0]所指向的
位置是相同的: <br>

<br>

<pre>#include &lt;iostream&gt; <br>using namespace std; <br><br>int main() {<br>    const int length = 10;<br>    int arr[length] = {0}; <br>    int *ptr = arr; <br><br>    for(int i = 0; i &lt; length; i++) { <br>        cout &lt;&lt; "&amp;arr[" &lt;&lt; i &lt;&lt; "]: " &lt;&lt; &amp;arr[i]; <br>        cout &lt;&lt; "\tptr+" &lt;&lt; i &lt;&lt; ": " &lt;&lt; ptr+i; <br>        cout &lt;&lt; endl; <br>    } <br>    <br>    return 0; <br>}</pre>

<span class="postbody"><br>

执行结果:</span><br>

<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">

  <tbody>

    <tr>

      <td style="background-color: rgb(0, 0, 0);"><small><span style="color: rgb(255, 255, 255);">&amp;arr[0]:
0x22ff30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+0: 0x22ff30<br>

&amp;arr[1]: 0x22ff34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+1:
0x22ff34<br>

&amp;arr[2]: 0x22ff38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+2:
0x22ff38<br>

&amp;arr[3]: 0x22ff3c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+3:
0x22ff3c<br>

&amp;arr[4]: 0x22ff40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+4:
0x22ff40<br>

&amp;arr[5]: 0x22ff44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+5:
0x22ff44<br>

&amp;arr[6]: 0x22ff48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+6:
0x22ff48<br>

&amp;arr[7]: 0x22ff4c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+7:
0x22ff4c<br>

&amp;arr[8]: 0x22ff50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+8:
0x22ff50<br>

&amp;arr[9]: 0x22ff54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptr+9:
0x22ff54</span></small><span style="color: rgb(255, 255, 255);"><br>

      </span></td>

    </tr>

  
  </tbody>
</table>

<br>

在这个程式中,您将阵列的第一个元素位址指定给ptr,然后对ptr作递增运算,每递增一个单位,其与阵列相对应索引的元素之记忆体位址都相同,这可以说
明阵列索引的背后意义。 <br>

<br>

您也可以利用指标运算来取出阵列的元素值,如以下的程式所示: <br>

<br>

<pre>#include &lt;iostream&gt; <br>using namespace std; <br><br>int main() {<br>    const int length = 5;<br>    int arr[length] = {10, 20, 30, 40, 50}; <br>    int *ptr = arr; <br><br>    // 以指标方式存取资料 <br>    for(int i = 0; i &lt; length; i++) {<br>        cout &lt;&lt; "*(ptr+" &lt;&lt; i &lt;&lt; "): " &lt;&lt; *(ptr+i)<br>             &lt;&lt; endl;<br>    }<br>    cout &lt;&lt; endl;<br><br>    // 以阵列方式存取资料 <br>    for(int i = 0; i &lt; length; i++) {<br>        cout &lt;&lt; "ptr[" &lt;&lt; i &lt;&lt; "]: " &lt;&lt; ptr[i]<br>             &lt;&lt; endl;<br>    }<br>    cout &lt;&lt; endl;<br><br>    // 以指标方式存取资料             <br>    for(int i = 0; i &lt; length; i++) {<br>        cout &lt;&lt; "*(arr+" &lt;&lt; i &lt;&lt; "): " &lt;&lt; *(arr+i)<br>             &lt;&lt; endl;<br>    }<br>    cout &lt;&lt; endl;<br>    <br>    // 以阵列方式存取资料 <br>    for(int i = 0; i &lt; length; i++) {<br>        cout &lt;&lt; "arr[" &lt;&lt; i &lt;&lt; "]: " &lt;&lt; arr[i]<br>             &lt;&lt; endl;<br>    }<br>    cout &lt;&lt; endl;<br>    <br>    return 0; <br>}<br></pre>

<span class="postbody"><br>

执行结果:</span><br>

<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2">

  <tbody>

    <tr>

      <td style="background-color: rgb(0, 0, 0);"><small><span style="color: rgb(255, 255, 255);">*(ptr+0): 10<br>

*(ptr+1): 20<br>

*(ptr+2): 30<br>

*(ptr+3): 40<br>

*(ptr+4): 50<br>

      <br>

ptr[0]: 10<br>

ptr[1]: 20<br>

ptr[2]: 30<br>

ptr[3]: 40<br>

ptr[4]: 50<br>

      <br>

*(arr+0): 10<br>

*(arr+1): 20<br>

*(arr+2): 30<br>

*(arr+3): 40<br>

*(arr+4): 50<br>

      <br>

arr[0]: 10<br>

arr[1]: 20<br>

arr[2]: 30<br>

arr[3]: 40<br>

arr[4]: 50</span></small><span style="color: rgb(255, 255, 255);"><br>

      </span></td>

    </tr>

  
  </tbody>
</table>

<br>

在上面的程式中,您可以使用指标运算配合*运算子来取出阵列中的每个元素,也可以配合下标运算子来取出阵列元素。 <br>

</body>
</html>

⌨️ 快捷键说明

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