發信人: ax.bbs@bbs.ee.nthu.edu.tw.
(athena), 信區: test
標 題: 星星流講座 0030
發信站: ☆清華電機☆ (Sat Jun 17 15:25:24 1995)
轉信站: star
星星流講座 0030 C 語言教室
第 5 講 之 6 陣列與指標
Topic: Relationship between array and pointers
現在請看看下列的程式:
/* strcpy.c */
#include <stdio.h>
void strcpy (char *s1, char *s2);
void main (void)
{
char a[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char b[6];
strcpy (b, a);
printf ("%s %s\n", a, b);
}
void strcpy (char *s1, char *s2)
{
while (*s1++ = *s2++)
;
}
上面的程式中我們自己寫了 strcpy 這個函數,而不用 string.h 中的 strcpy,
這只是為了做一個示範而已,順便讓各位知道一下 string.h 中的函數是如何做
出來的。
這個程式第一個值得說明的地方是
char a[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
這是給定陣列初始值的方法之一,它的意思是把 H、e、l、l、o、\0 等六個字元
依序放進 a[] 這個陣列裡。如果我寫成這個樣子成不成呢?
char a[6];
a[] = {'H', 'e', 'l', 'l', 'o', '\0'};
答案是不成。這時候你得乖乖的寫成:
a[0] = 'H'; a[1] = 'e'; a[2] = 'l';
a[3] = 'l'; a[4] = 'o'; a[5] = '\0';
第二個值得說明的地方是:
strcpy (b, a);
奇怪在哪裡呢?你有沒有發現 strcpy 的原型是宣告成
void strcpy (char *s1, char *s2);
它要的是兩個指標,可是我們卻傳給他陣列?其實給定一個
陣列 a[], a 這個變數這時候就代表指向陣列第一個元素 a[0] 的指
標:
┌─ a 其實就是指向 a[0] 的指標
↓
┌┬┬┬┬┬┬……┐
└┴┴┴┴┴┴……┘ 陣列 a[]
註標 [] 其真正的意義就是引用指標。這句話有些難以理解,但是請你看看
這個式子你就能了解了:
a[0] 相當於 *a 即相當於 *(a+0)
a[2] 相當於 *(a+2)
--
本文原作者為徐振家,原作刊載於星星神教總壇 ☆清華電機☆ test 板。
你可以以電子文件的形式將本文自由流傳於台灣學術網路,但必須包含此版權聲明。
原作者依中華民國著作權法之規定,享有本文之著作權,請勿抄襲以免觸法。
未經授權任何人不得以任何形式對本文做任何修改及商業上之應用。
其他網路的轉載或其他用途的應用,請先知會作者,並取得其同意。
對本文有任何疑問或意見請 mail 給
ax.bbs@bbs.ee.nthu.edu.tw,謝謝。