main(int argc,char *argv){
while(argc-->1)
printf("%s\n",*++argv);
}
本例是顯示命令行中輸入的參數(shù)如果上例的可執(zhí)行文件名為e24.exe,存放在A驅(qū)動(dòng)器的盤內(nèi)。
因此輸入的命令行為: C:\>a:e24 BASIC dBASE FORTRAN
則運(yùn)行結(jié)果為:
BASIC
dBASE
FORTRAN
該行共有4個(gè)參數(shù),執(zhí)行main時(shí),argc的初值即為4。argv的4個(gè)元素分為4個(gè)字符串的首地址。執(zhí)行while語(yǔ)句,每循環(huán)一次 argv值減1,當(dāng)argv等于1時(shí)停止循環(huán),共循環(huán)三次, 因此共可輸出三個(gè)參數(shù)。在printf函數(shù)中,由于打印項(xiàng)*++argv是先加1再打印, 故第一次打印的是argv[1]所指的字符串BASIC。第二、 三次循環(huán)分別打印后二個(gè)字符串。而參數(shù)e24是文件名,不必輸出。
下例的命令行中有兩個(gè)參數(shù),第二個(gè)參數(shù)20即為輸入的n值。在程序中*++argv的值為字符串“20”,然后用函數(shù)"atoi"把它換為整型作為while語(yǔ)句中的循環(huán)控制變量,輸出20個(gè)偶數(shù)。
#include"stdlib.h"
main(int argc,char*argv[]){
int a=0,n;
n=atoi(*++argv);
while(n--) printf("%d ",a++*2);
}
本程序是從0開始輸出n個(gè)偶數(shù)。指向指針的指針變量如果一個(gè)指針變量存放的又是另一個(gè)指針變量的地址, 則稱這個(gè)指針變量為指向指針的指針變量。
在前面已經(jīng)介紹過(guò),通過(guò)指針訪問(wèn)變量稱為間接訪問(wèn), 簡(jiǎn)稱間訪。由于指針變量直接指向變量,所以稱為單級(jí)間訪。 而如果通過(guò)指向指針的指針變量來(lái)訪問(wèn)變量則構(gòu)成了二級(jí)或多級(jí)間訪。在C語(yǔ)言程序中,對(duì)間訪的級(jí)數(shù)并未明確限制, 但是間訪級(jí)數(shù)太多時(shí)不容易理解解,也容易出錯(cuò),因此,一般很少超過(guò)二級(jí)間訪。 指向指針的指針變量說(shuō)明的一般形式為:
類型說(shuō)明符** 指針變量名;
例如: int ** pp; 表示pp是一個(gè)指針變量,它指向另一個(gè)指針變量, 而這個(gè)指針變量指向一個(gè)整型量。下面舉一個(gè)例子來(lái)說(shuō)明這種關(guān)系。
main(){
int x,*p,**pp;
x=10;
p=&x;
pp=&p;
printf("x=%d\n",**pp);
}
上例程序中p 是一個(gè)指針變量,指向整型量x;pp也是一個(gè)指針變量, 它指向指針變量p。通過(guò)pp變量訪問(wèn)x的寫法是**pp。程序最后輸出x的值為10。通過(guò)上例,讀者可以學(xué)習(xí)指向指針的指針變量的說(shuō)明和使用方法。
下述程序中首先定義說(shuō)明了指針數(shù)組ps并作了初始化賦值。 又說(shuō)明了pps是一個(gè)指向指針的指針變量。在5次循環(huán)中, pps 分別取得了ps[0],ps[1],ps[2],ps[3],ps[4]的地址值(如圖6.10所示)。再通過(guò)這些地址即可找到該字符串。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |