BBS水木清华站∶精华区

发信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信区: test 
标  题: 星星流讲座 0025 
发信站: ☆清华电机☆ (Mon Jun  5 14:24:06 1995) 
 
 
第 5 讲 之 1            阵列与指标 
                        Topic: Introduction to pointer 
 
我们前面提到过阵列,阵列就是循序排列的相同型态的资料。在 C 语言 
之中,为了强化操作阵列的功能,特别引进了指标 (pointer) 的观念。 
什麽是指标呢?请看下面的图: 
 
        ┌——┐ 
    指标│位址┼—┐ 
        └——┘  │ 
                  ↓ 
                ┌—┐ 
                │  │资料 
                └—┘ 
 
指标也是一个变数,只是指标所储存的是它所指向的资料的位址。 
例如: 
 
        int a;          /* 一个整数 a */ 
        int *p;         /* 一个指向某个整数的指标 p */ 
        p = &a;         /* 把 p 指向 a */ 
 
我们可以用上面的图形来表示 a 和 p 的关系: 
 
        p 
    ┌————┐ 
    │a 的位址┼—┐ 
    └————┘  │ 
                  ↓ 
                ┌—┐ 
                │  │a 
                └—┘ 
 
指标的宣告很容易,只要在前面加上星号 * 即可。接下来我们要介绍一个 
很重要的观念:指标的引用 (reference)。 
 
像上面的例子中,p 的内容是 a 的位址,但是实际上我们想要操作的是 a 
的内容,这个时候你可以用: 
 
        *p = 2; 
 
*p 代表取用 p 所指向的东西 (在我们的例子中就是 a),所以 *p = 2; 和 
a = 2 是等价的。请看下面的□例程式以求验证: 
 
/* ref.c */ 
#include <stdio.h> 
 
void main (void) 

    int a; 
    int *p; 
    p = &a; 
 
    *p = 2; 
    printf ("%d\n", a); 

 
执行结果: 
 

 
归纳一个很重要的观念:一个指标 p,当你在程式之中使用 p 时,p 代表 
的是 p 所指向的位址;当你在程式中使用 *p 时,*p 代表的是 p 所指向 
的内容。这个观念是学好指标最重要的观念,也是学好 C 语言最重要的观 
念,请务必确定你已经清楚了,然後再阅读以下的内容。 
 
-- 
本文原作者为徐振家,原作刊载於星星神教总坛 ☆清华电机☆ test 板。 
你可以以电子文件的形式将本文自由流传於台湾学术网路,但必须包含此版权声明。 
原作者依中华民国著作权法之规定,享有本文之著作权,请勿抄袭以免触法。 
未经授权任何人不得以任何形式对本文做任何修改及商业上之应用。 
其他网路的转载或其他用途的应用,请先知会作者,并取得其同意。 
对本文有任何疑问或意见请 mail 给 ax.bbs@bbs.ee.nthu.edu.tw,谢谢。 
 
 

BBS水木清华站∶精华区