《指標的程式設計藝術(第二版)》一3 7 命令列引數

2021-09-23 16:27:30 字數 2128 閱讀 7807

指標的程式設計藝術(第二版)

在c程式語言中,函式是平等的,而main() 函式是程式的進入點。在執行程式時可以附加一些選擇項,這有點類似早期dos(現稱為命令列引數模式)的指令或unix的指令,如dos的dir/w,其中的/w為乙個選擇項,表示當執行dir指令時,是以wide的模式輸出,如unix下的

ls -l –a```

ls與dir指令具有相同的功能,其中-l和-a都為附加的選擇項。

假設有個排序的程式,並且在此程式中有遞增(由小至大)和遞減(由大至小)的功能。不同的使用者,其使用的功能也會不同,為了達到這個目標,可使用命令列引數(command-line argument)來;完成。

具備命令列引數的程式,只要將程式的main( )函式改為

int main(int argc, char *ar**)`命令列引數的重點在於判斷有無附加的選擇項,以及如何得到那些附加的選擇項,以便進一步的工作。

當argc > 1時,表示有附加的選擇項,可使用ar**取得,例如,有一程式sort.c,經compile及link得到乙個執行檔案sort.exe(假設在c:prog的目錄下),因此,可在命令列提示符的模式下,輸入以下的資料,

c:\prog>sort -n –r```

其中-n表示要排序的資料是數字,不是字串。而-r表示使用降序功能來排序,此時argc為3,而ar**可以用下圖表示。

ar**指向陣列的第乙個元素的指標變數,所以*ar** == ar**[0]。ar**[0]是指向「c:\prog\sort.exe」 字串的指標,ar**[1]是指向「-n」字串的指標,而ar**[2]為指向「-r」字串的指標。由於ar**是指標變數,因此ar**可搭配遞增或遞減運算子,如ar**++。ar**[0]則是當前ar**所指向位址的內容,當ar**指標改變其指向的位址時,ar**[0]也會隨之改變。

「-n」中的『-』字元,可使用*(ar**[1])取得,而*(ar**[1]+1)可得到「-n」中的n。其實*(ar**[1])相當於**(ar**+1),而*(ar**[1]+1)相當於*(*(ar**+1)+1),依此類推,「-r」中的『-』字元可使用*(ar**[2])獲得,所以*(ar**[2]+1)可得「-r」中的r。

接下來,以範例commandline-1說明命令列引數的使用方法。

範例commandline-1

/commandline-1.c /

int main(int argc, char *ar**)

輸出結果

這種命令列引數的程式,必須在命令提示符的模式下才能執行,如果我們將commandline-1.exe(此檔案生成在commandline-1.c所在的目錄下)複製到c:\ 的目錄下,並輸入以下的資料,

```c:\commandline-1 hello world```

輸出結果如上圖所示。

*(ar**[2]+2)與*(*ar**+2)+2所得到的結果都是字元r。用圖形表示如下。

再來看看範例commandline-2,它是模仿dir/w及type的系統指令的操作。

範例commandline-2

/commandline-2.c /

int main(int argc, char *ar**)

}else

printf("using commandline -d or -t");

printf("n");

getch();

return 0;

}輸出結果

下圖是以commandline-2 –d命令列所得到的結果。

《指標的程式設計藝術(第二版)》一3 3 陣列指標

指標的程式設計藝術 第二版 陣列指標 pointers of array 表示陣列的元素,都是指向某個資料型別的指標,如 char parr 4 由於 運算子的優先順序高於 運算子,因此,parr是4個元素組成的陣列,陣列中的每個元素都是指向char資料型別的指標。如果將上述的定義用圖形來表示的話,...

《指標的程式設計藝術(第二版)》一1 5 練習

指標的程式設計藝術 第二版 1 以下是linda所撰寫的程式,請你幫她debug一下。addressbugs5.c include include int main 2 以下是jennifer所寫的程式,請你幫她debug一下。addressarraybugs5.c include include ...

《指標的程式設計藝術(第二版)》一1 4 結構

指標的程式設計藝術 第二版 談完了陣列後,接著討論結構。結構是由多個不同資料型別所組成的乙個集合體。我們以範例addressstruct來加以說明。範例addressstruct addressstruct.c include include int main 定義結構變數,並設定其初值 struc...