📄 pointerandarray.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: 指标与阵列</a></h1>
在宣告一个阵列之后,阵列名称用来参考至阵列的第一个元素的记忆体位址,例如在下面的程式中将指出,阵列arr与&arr[0]所指向的
位置是相同的: <br>
<br>
<pre>#include <iostream> <br>using namespace std; <br><br>int main() { <br> int arr[10] = {0}; <br> cout << "arr :\t\t" << arr <br> << endl; <br> cout << "&arr[0]: \t" << &arr[0] <br> << 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
:
0x22ff40<br>
&arr[0]: 0x22ff40</span></small><span style="color: rgb(255, 255, 255);"><br>
</span></td>
</tr>
</tbody>
</table>
<br>
之前也曾经讨论过,阵列的索引其实是相对于第一个记忆体位址的位移量,下面这个程式也可以印证这个事实: <br>
在宣告一个阵列之后,阵列名称用来参考至阵列的第一个元素的记忆体位址,例如在下面的程式中将指出,阵列arr与&arr[0]所指向的
位置是相同的: <br>
<br>
<pre>#include <iostream> <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 < length; i++) { <br> cout << "&arr[" << i << "]: " << &arr[i]; <br> cout << "\tptr+" << i << ": " << ptr+i; <br> cout << 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);">&arr[0]:
0x22ff30 ptr+0: 0x22ff30<br>
&arr[1]: 0x22ff34 ptr+1:
0x22ff34<br>
&arr[2]: 0x22ff38 ptr+2:
0x22ff38<br>
&arr[3]: 0x22ff3c ptr+3:
0x22ff3c<br>
&arr[4]: 0x22ff40 ptr+4:
0x22ff40<br>
&arr[5]: 0x22ff44 ptr+5:
0x22ff44<br>
&arr[6]: 0x22ff48 ptr+6:
0x22ff48<br>
&arr[7]: 0x22ff4c ptr+7:
0x22ff4c<br>
&arr[8]: 0x22ff50 ptr+8:
0x22ff50<br>
&arr[9]: 0x22ff54 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 <iostream> <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 < length; i++) {<br> cout << "*(ptr+" << i << "): " << *(ptr+i)<br> << endl;<br> }<br> cout << endl;<br><br> // 以阵列方式存取资料 <br> for(int i = 0; i < length; i++) {<br> cout << "ptr[" << i << "]: " << ptr[i]<br> << endl;<br> }<br> cout << endl;<br><br> // 以指标方式存取资料 <br> for(int i = 0; i < length; i++) {<br> cout << "*(arr+" << i << "): " << *(arr+i)<br> << endl;<br> }<br> cout << endl;<br> <br> // 以阵列方式存取资料 <br> for(int i = 0; i < length; i++) {<br> cout << "arr[" << i << "]: " << arr[i]<br> << endl;<br> }<br> cout << 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 + -