address-of 運算符號

至此,讀者應該已經能夠分辨變數和常數的分別。 注意,以

#define SIZE 25
這種方式定義的 SIZE 並不是變數,而是代表 25 的常數。 我們又稱它為符號常數 (symbolic constant)。 凡是 C 語言中的變數,都在電腦的記憶體中佔有空間, 而那個空間裡面儲存著變數的數值。 例如,當我們說
char t;
int i;
float x;
double y;
則這四個變數 t i x y 各自在電腦的記憶體中佔有空間。 而且我們要提示以下幾個常見的基本原則: 其他還有一些更細節的規則,就暫時不聲明了。

C 語言提供我們一個機制,使得程式設計者可以得知變數所在的記憶體位置。 那就是透過 & 這個運算符號,它的名字是 address-of。 例如 &t 就代表 t 所佔用的那個字元的地址編號, 而 &i&x&y 分別代表 ixy 所佔用的字元中,第一個字元的地址編號。 因為我們知道資料型態的含量,又知道變數一定佔用連號的字元, 所以只要知道第一個字元的地址編號,當然就知道了所有佔用字元的地址編號。 以下這個小程式,就測試 & 的用法。


#include <stdio.h>

/* 測試 address-of 運算  (test-address.c) */
main() {
    char t='a';
    int i=0;
    float x=1;
    double y=2;
    printf("t at %u, i at %u, x at %u, y at %u\n", &t, &i, &x, &y);
}

注意上述程式中的輸出格式,用的是 %u。 在我寫到這裡的此時此刻,在我的電腦上執行上述程式,得到
t at 4026530503, i at 4026530496, x at 4026530492, y at 4026530480
因此, 我們發現變數佔用的字元地址,隨著宣告的順序而遞減。 而且似乎漏掉了一些字元沒用到,造成浪費。 這些細節,牽涉到計算機組織與作業系統,都不在此深入了。

讀者如果做了實驗,或許會發現每次執行這個實驗的結果都一樣。 即使是在多人多工的 UNIX 系統中,也會如此。 這似乎有點不合直覺。 這個現象關係到作業系統的設計,使得每個使用者的每個操作介面,

習題

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Feb 23, 2001
Last Revised: Feb 23, 2001
© Copyright 2001 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw