?? c64.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>指針和數(shù)組 </title>
<script language="javascript">
var prePage="http://www.nec.sjtu.edu.cn/support/Course/C/c/c6/c/c6/c63.htm";
var nextPage="c/c6/c65.htm";
</script>
<link rel="stylesheet" href="../cstyle.css" type="text/css">
</head>
<body background="../img/mainback.jpg" bgproperties="fixed">
<h2 align="center"><font face="楷體_GB2312"><a name="_top"></a>6.4 指針和數(shù)組</font></h2>
<table border="0" width="100%">
<tr>
<td width="33%"><p align="center"><a href="c64.htm#c641.html#c641">指向數(shù)組的指針和數(shù)組下標</a>
</td>
<td width="33%"><p align="center"><a href="c64.htm#c642.html#c642">指向字符串的指針</a></td>
<td width="34%"><p align="center"><a href="c64.htm#c643.html#c643">指針數(shù)組 </a></td>
</tr>
</table>
<hr>
<h3><a name="c641"></a>1.指向數(shù)組的指針和數(shù)組下標 </h3>
<blockquote>
<p class="note">在 C 語言中,
指針的最一般用途是作為指向數(shù)組的指針。使用指向數(shù)組的指針的主要理由是為了表示上的方便和程序的高效率。一般而言,
使用指向數(shù)組的指針產生的代碼能節(jié)約內存空間, 并且運行速度快。</p>
<p>定義: <br>
int v[100];<br>
int *v_pointer;<br>
<br>
如要把 v_pointer 指向數(shù)組 v 的第一個元素, 使用語句 v_pointer=&v[0];<br>
如果我們用另一種方法來設置: v_pointer=v;<br>
這兩句語句的效果是完全一樣的!!<br>
假定 v_pointer 指向 v[1], 那么, 語句: *v_pointer=100;
與下面的語句的效果一樣。<br>
v[1]=100;<br>
如果我們設置: v_pointer=v, 那么, 下面的關系成立: <br>
*v_pointer == v[0];<br>
*(v_pointer+1) == v[1];<br>
*(v_pointer+i) == v[i];<br>
<br>
一般而言, 如果我們這樣來設置:<br>
v_pointer=&v[n];<br>
其結果<br>
*v_pointer == v[n];<br>
*(v_pointer-i) == v[n-i];<br>
*(v_pointer+i) == v[n+i] <br>
</p>
<p align="right"><a href="c64.htm#_top.html#_top">返回頁首</a></p>
</blockquote>
<hr>
<h3><a name="c642"></a>2.指向字符串的指針</h3>
<blockquote>
<p class="note">指向數(shù)組的指針最常見的應用是指向字符串的指針。</p>
<p>為了說明使用指向字符串的指針會給處理帶來多大方便,
我們編寫了一個稱作為 copy_string 的函數(shù), 其功能
是把一個字符串拷貝給另一個。</p>
<p>1. 如果采用一般的數(shù)組下標方法, 那么函數(shù)將會是如下這樣的:<br>
void copy_string(char from[], char to[])<br>
{<br>
int i;<br>
for(i=0;from[i]!='\0';++i)<br>
to[i]=from[i];<br>
to[i]='\0';<br>
}<br>
<br>
2. 如果使用指針的話, 那么函數(shù)會是如下這樣的:<br>
void copy_string(char *from, char *to)<br>
{<br>
for( ;*from!='\0';++from,++to)<br>
*to=*from;<br>
*to='\0';<br>
}</p>
<p class="note">注意: '\0'是字符串的結束符!</p>
<p>比較: 在第二個程序中, 我們不再需要下標變量 i。這是一個更有效的程序!</p>
<table border="5" width="78%" bgcolor="#CCFFFF" bordercolor="#FF9933" cellspacing="0"
cellpadding="0">
<tr>
<td width="63%">main()<br>
{<br>
void copy_string(char *, char *);<br>
static char string[50];<br>
copy_string("So is this",string);<br>
printf(" %s\n",string);<br>
}<br>
void copy_string(char *from, char *to)<br>
{<br>
for( ;*from!='\0';++from,++to)<br>
*to=*from;<br>
*to='\0';<br>
}</td>
<td width="37%">說明: 左邊的程序調用了下面這個函數(shù):<br>
copy_string(\"So is this\",string);<br>
在此, 字符串常數(shù)作為實參傳遞給函數(shù),
實際上傳送的是指向它的指針。這一情況并非本例所特有的。在 C語言中,
每當用到字符串時, 實際上用的是指向該字符串的指針。</td>
</tr>
</table>
<p><br>
更詳細地說, 如果我們定義了:<br>
char *text_pointer;<br>
那么, 語句: text_pointer="A char-string"; 把指向字符串 "A
char-string" 的指針賦值給 text_pointer。<br>
但是, 如果定義如下: <br>
char text[80];<br>
那么, 語句: text="This is not valid"; 是不正確的!!<br>
</p>
<p class="note">注意: 字符串和字符數(shù)組不一樣!!</p>
<p align="right"><br>
<a href="c64.htm#_top.html#_top">返回頁首</a></p>
</blockquote>
<hr>
<h3><a name="c643"></a>3.指針數(shù)組 </h3>
<blockquote>
<p>說明: 數(shù)組的元素也可以是指針。我們可以這樣來定義: char *days[];
我們可以如下這樣, 對指針數(shù)組進行初始化:<br>
static char *days[]=<br>
{"Sunday","Monday","Tuesday",
"Wednesday","Thursday","Friday","Saturday"};<br>
數(shù)組 days 有七個元素。days
的每個元素分別是一個指向字符串常數(shù)的指針, 如 day[0]
指向的內容為 Sunday\0。"</p>
<p align="right"><a href="c64.htm#_top.html#_top">返回頁首</a></p>
</blockquote>
<p align="center"><a href="http://www.nec.sjtu.edu.cn/support/Course/C/c/c6/c65.htm"><img src="../img/next.gif" width="145" height="30"
alt="next.gif (3633 bytes)" border="0"></a></p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -