標籤:
C語言中,最靈活但又容易出錯的莫過於指標了。而指標數組,是在C中很常見的一個應用。指標數組的意思是說,這個數組儲存的所有對象都為指標。除了儲存物件為指標,即一個地址外,其它操作和普通數組完全一樣。
1 #include <stdion.h>2 3 int main() {4 int i;5 char *name[] = {"BASIC", "FORTRAN", "C++", "Pascal", "COBOL"};6 for (i = 0; i < (sizeof(name)/sizeof(char *)); i++)7 printf("%s ", name[i]);8 return 0; 9 }
上面的代碼中,定義了一個名為name的指標數組。它的資料類型為char *,表示其中儲存的所有資料都為char指標,而name後面的[]則表示這是一個數組,並且未指定數組的大小。定義的同時,用{}內的內容初始化這個指標數組。而後,對指標數組的引用中,每個數組元素,都是一個指向字串的指標。它們的對應關係如:
指標數組最常見的用法是在主函數,用以接收UNIX系統中由命令列傳遞的參數。記得大一學C語言時,當時什麼指標數組,數組指標,完全就是不明就裡。我記得,當時,也有講到指標數組的命令列參數的應用。不過,在一個用Windows 系統下,用VC 6.0教學的環境下,都沒誰來得及問下老師什麼是命令列。因為不懂的實在太多了,不知從何問起了。不過想想也對,當時就算給我講了什麼是命令列,我也不一定能懂。
帶命令列參數的C主函數原型:int main(int argc, char *argv[])。argc 參數會記錄參數個數,而argv參數會具體記錄所有參數,每一個參數都是以指標定址的字串,即指標數組中的每個元素都指向一個參數的地址。所以通過訪問argv[1],可以獲得目錄名。在命令列參數的應用中,argv[0]指向當前命令名,argv[n]指向通過命令列傳遞進來的第n個參數。比如:UNIX中的ls命令的一個簡單實現。
1 #include "apue.h" 2 #include <dirent.h> 3 4 int main(int argc, char *argv[]) 5 { 6 DIR *dp; 7 struct dirent *dirp; 8 9 if (argc != 2)10 err_quit("usage: ls directory_name");11 12 if ((dp = opendir(argv[1])) == NULL)13 err_sys("can‘t open %s", argv[1]);14 while ((dirp = readdir(dp)) != NULL)15 printf("%s\n", dirp->d_name);16 17 closedir(dp);18 exit(0);19 }
這樣的應用,在UNIX中,不知還有多少。一開始學習C語言時,完全是蒙的。不知其有何具體用處。而學了UNIX之後,就發現UNIX就是C的最佳實務。畢竟,C是作為寫UNIX的工具而發明的。
《C語言學習筆記》指標數組及其應用