發信人: 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 語言最重要的觀
念,請務必確定你已經清楚了,然後再閱讀以下的內容。