發信人: ax.bbs@bbs.ee.nthu.edu.tw. (athena), 信區: test
標  題: 星星流講座 0025
發信站: ☆清華電機☆ (Mon Jun  5 14:24:06 1995)
轉信站: star

星星流講座 0025         C 語言教室

第 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);
}

執行結果:

2

歸納一個很重要的觀念:一個指標 p,當你在程式之中使用 p 時,p 代表
的是 p 所指向的位址;當你在程式中使用 *p 時,*p 代表的是 p 所指向
的內容。
這個觀念是學好指標最重要的觀念,也是學好 C 語言最重要的觀
念,請務必確定你已經清楚了,然後再閱讀以下的內容。