BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0030 
发信站: ☆清华电机☆ (Sat Jun 17 15:25:24 1995) 
 
 
第 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,谢谢。 
 
 

BBS水木清华站∶精华区